You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Git分支合并冲突判定规则及异常场景咨询

Git冲突判定逻辑详解

Git的冲突判定不依赖最终分支的行号,核心是基于共同祖先版本对比两个分支的变更范围:

  1. 先找到两个分支最近的共同祖先文件版本
  2. 分别计算当前分支("我们的分支")和待合并分支("他们的分支")相对于祖先的变更内容
  3. 只有当两组变更修改了祖先版本中同一/重叠区域的内容,且无法自动合并时,才会触发冲突。

针对你提到的几种情况:

  • 第36行vs36行、第49行vs49行未触发冲突:
    看起来是两个分支的最终行号一致,但实际在共同祖先版本中,这两处修改对应的是不同的内容区域。比如其中一个分支在修改目标行之前,已经对文件做了增删行操作,导致最终行号巧合对齐,但修改的是祖先版本里的不同行;或者其中一个分支的修改内容和祖先版本完全一致,只有另一个分支做了变更(这种情况Git会直接采纳变更,不会冲突)。
  • 第65行vs69行未触发冲突:
    行号差异说明至少一个分支在目标行之前有增删行操作,导致行号偏移。这两处修改在共同祖先版本中属于完全不重叠的内容区域,Git判定为独立变更,因此自动合并,不触发冲突。
  • 第110行vs114行触发冲突:
    虽然两个分支的最终行号不同,但这两处修改对应的是共同祖先版本中的同一行/重叠区域。比如分支A修改了祖先的某行后删除了部分行,分支B修改了同一行后又添加了部分行,导致最终行号偏移,但Git能识别到两组变更针对的是祖先版本的同一内容,且修改内容无法自动合并(比如两边对同一行的修改完全不同),因此触发冲突。

内容的提问来源于stack exchange,提问作者zackOverflow

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 02:28:19