为何此Git合并提交未显示差异?冲突处理后删除行未出现在diff中
为什么合并提交的diff中没有显示删除添加行的操作?
这其实是Git合并提交默认的combined diff行为导致的,我来给你拆解清楚:
核心原因:Git合并提交的diff逻辑不一样
普通提交的diff是和它的唯一父节点对比,但合并提交有两个父节点(这里是16fcbc7和6c0160b)。默认情况下,git show或git log -p展示合并提交时会用combined diff模式——这个模式只会显示那些最终结果与所有父节点都存在差异的行,目的是突出合并时真正需要手动解决冲突的内容,而不是简单罗列两个分支各自的修改。
结合你的场景具体分析
咱们看你的两个分支修改:
- master分支(16fcbc7):新增了一行
and it all was left unspoken, in the vastness of the ocean, - capitalize-lenore分支(6c0160b):把所有
Lenore改成LENORE,没有新增那行
你合并时选择保留capitalize-lenore的修改,也就是放弃了master新增的那行。此时合并后的结果:
- 对于
Lenore→LENORE的修改:合并结果和capitalize-lenore父节点完全一致,只和master父节点不同,不符合「与所有父节点都有差异」的条件,所以不会出现在combined diff里。 - 对于master新增的那行:合并结果里没有这行,和master父节点不同,但和
capitalize-lenore父节点完全一致(因为这个分支本来就没有这行),同样不符合combined diff的展示条件,所以也不会显示。
怎么查看合并提交的完整修改?
如果你想看到合并提交实际做了什么,可以用以下方法:
- 分别对比合并提交与两个父节点的差异:
# 对比合并提交和master父节点(16fcbc7)的差异 git diff 584d05b^1 584d05b # 对比合并提交和capitalize-lenore父节点(6c0160b)的差异 git diff 584d05b^2 584d05b - 或者让Git把合并提交拆分成两个虚拟的普通提交来展示:
git show -m 584d05b
内容的提问来源于stack exchange,提问作者dta
相关产品推荐
相关产品推荐

