为何git log -p -- <文件>会显示无补丁的合并提交?
为什么
git log -p -- <文件路径>里部分合并提交不显示补丁? 这是因为Git默认只会展示合并提交自身对目标文件做出的修改,而不是合并涉及的所有分支的修改内容。如果某个合并提交(比如<hashM>)没有对该文件产生实质性的修改,Git就不会输出对应的补丁:
- 快进合并或无差异合并:如果合并是快进模式(Git直接移动分支指针,无新提交),或者合并时目标文件在两个分支的内容可以自动对齐(比如一个分支没改这个文件,另一个分支的修改直接被采纳),合并提交本身没有改变该文件的内容,自然不会有补丁输出。
- 无冲突自动合并后内容与父提交一致:即便不是快进合并,只要合并后的文件内容和其中一个父提交的内容完全相同,Git就认为这个合并提交没有对该文件做修改,也就不会展示补丁。
如果要查看合并提交中涉及的所有文件差异,可以用git log -p --cc -- <文件路径>,--cc参数会强制展示合并提交里的所有相关差异;也可以直接用git show <hashM> -- <文件路径>单独查看该合并提交对目标文件的影响。
内容的提问来源于stack exchange,提问作者Charles
相关产品推荐
相关产品推荐

