查看合并提交的补丁

zor*_*119 4 git git-log

运行git log --first-parent -p向我展示了我感兴趣的提交,但我想查看合并提交和非合并提交-p的补丁(仅显示非合并提交的补丁)。

有没有办法查看合并提交的补丁?

tor*_*rek 6

有很多选项可以控制这一点。

比较合并提交的基本问题是有多个父项(根据定义,因为它是合并)。什么git show(这,我知道了,是不是git log,挂在了一会儿)默认情况下所做的是告诉你一个“组合差异”,这是在另一个不同的文档页面适当的描述,为git diff-tree

-C

这个标志改变了合并提交的显示方式(这意味着它只有在命令被赋予一个tree-ish或时才有用--stdin)。它同时显示每个父级与合并结果的差异,而不是一次显示一个父级和结果之间的成对差异(这是-m选项的作用)。此外,它仅列出所有父项修改过的文件。

--cc

此标志以与-c选项类似的方式更改合并提交补丁的显示方式。它暗示了-c-p选项,并通过省略无趣的块来进一步压缩补丁输出,这些块的父项中的内容只有两个变体,并且合并结果选择其中之一而无需修改。当所有大块都无趣时,不会显示提交本身和提交日志消息,就像在任何其他“空差异”情况下一样。

我们现在准备的方式跳全力以赴git log,它实现了所有三个选项(-c--cc,和-m;注意--cc使用两个-字符,而其他人只使用一个)。添加其中之一将为合并提交生成补丁。具体来说,您可能想要-m. 这实际上在文档中描述(接近网页末尾):

git log -p -m --first-parent

显示包括更改差异的历史记录,但仅从“主分支”的角度来看,跳过来自合并分支的提交,并显示合并引入的更改的完整差异。只有在遵循合并所有主题分支并停留在单个集成分支上的严格策略时,这才有意义。