광고
광고

SKIDIA's PaperBoy

ZH WIRE · 2026-09-22 02:55

Git 仅在补丁恰好触及同一行时才提示冲突,跨工单的重复与冲突仍要靠评审者认出

基本属实

对依赖分支与合并协作的开发团队而言,Git 的冲突提示常被当作一道自动保险。但这道保险的刻度是“行”:只有当两个分支产生的补丁恰好改到同一行代码,Git 才会停下来要求人工处理。若两张工单改动的是不同位置、合并后却互相干扰,版本库会安静地放行;问题能否在进入主干前被拦下,取决于评审者是否同时熟悉这两张工单。

원문 주장 (KR)
Git only notices if the resulting patches happen to touch the same lines and the review only catches it if they are familiar with both tickets.

报警的边界:同一行才算撞车

Git 的合并以行为单位进行比对。两个补丁一旦触及相同行,工具便将其标记为冲突、交由开发者手动裁决——这是它识别“撞车”的唯一手段。它并不理解代码的语义:两项各自成立、放在一起才出问题的改动,只要落在不同的行上,就能双双顺利通过合并。

这也意味着,两个工单给出同一功能的不同实现,或是在互不相干的位置改动了彼此依赖的逻辑,Git 同样不会察觉。文本层面的“同行相撞”会触发报警,语义层面的“各行其是”则一路绿灯。

第二道闸:评审,以及评审者的记忆

在工具失效的地方,代码评审成为事实上的最后防线。但这条防线的强度完全取决于人:只有当评审者对两张工单都熟悉——知道各自在做什么、改动之间存在何种牵连——才可能认出这是同一件事的两种写法,或是迟早会互相干扰的两处修改。若评审者只接触过其中一张工单,重复劳动与逻辑冲突便会随合并一同进入主干。

换句话说,冲突检测止步于文本行,语义层面的把关被交给了记忆与上下文:谁同时见过这两张工单,谁才守得住这道闸。

Git 只在补丁触及同一行时才提示冲突,评审能否拦下问题取决于评审者是否熟悉两张工单——这一结论基本属实。

Sources — primary documents (12)
  1. https://git-scm.com/docs/git-merge
  2. https://git-scm.com/book/en/v2/Git-Branching-Basic-Branching-and-Merging
  3. https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/addressing-merge-conflicts/about-merge-conflicts
  4. https://soft.vub.ac.be/~wmuylaer/repository/2023scam.pdf
  5. https://arxiv.org/abs/2310.02395
  6. https://dl.acm.org/doi/10.1145/3546944
  7. https://par.nsf.gov/biblio/10515782-characterization-study-merge-conflicts-java-projects
  8. https://arxiv.org/abs/2111.11904
  9. https://www.microsoft.com/en-us/research/publication/expectations-outcomes-and-challenges-of-modern-code-review/
  10. https://homes.cs.washington.edu/~mernst/pubs/vc-conflicts-tse2013-abstract.html
  11. https://par.nsf.gov/biblio/10515782
  12. https://git-scm.com/images/[email protected]

KR: /news/ · 판정: 대체로 사실