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

Git diff显示分支完整差异,merge仅识别部分差异的原因及解决方法

问题原因

Git合并采用的是三路合并算法,核心逻辑是对比两个分支的当前版本与它们的共同祖先版本:

  • 如果addition()和subtraktion()是在共同祖先之后,分别在两个分支独立添加的,且这两个方法的代码没有重叠、也未修改同一行/相邻行代码,Git会自动完成这部分内容的合并,不会标记为冲突。
  • 只有当两个分支修改了同一行或相邻区域的代码(比如你示例中的打印语句),Git无法自动判断保留哪部分时,才会标记为冲突。
  • 而git diff是直接对比两个分支的当前版本,会显示所有差异(不管是否能自动合并),所以看起来和merge的结果不一致。
解决方法

Git其实已经自动合并了两个方法,你只需要处理那处冲突的打印语句,就能得到包含所有方法的文件:

  1. 打开Math.java,修改冲突块(比如保留需要的打印内容,或者调整成符合需求的代码),删除<<<<<<< HEAD、=======、>>>>>>>这些标记。
  2. 执行git add Math.java标记冲突已解决。
  3. 执行git commit完成合并操作。

删除重新复制文件没用,因为Git是基于版本历史的合并逻辑,不是单纯对比文件当前内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 04:12:34