在做了一个“简单的”合并(没有冲突)之后,git show通常只显示如下内容

commit 0e1329e551a5700614a2a34d8101e92fd9f2cad6 (HEAD, master)
Merge: fc17405 ee2de56
Author: Tilman Vogel <email@email>
Date:   Tue Feb 22 00:27:17 2011 +0100

Merge branch 'testing' into master

这是因为,对于合并,git show使用组合的diff格式,省略了与父版本一致的文件。

有没有办法强制git在组合diff模式下仍然显示所有差异?

执行git show -m将显示差异(分别使用新版本和所有父版本之间的两两差异),但我更喜欢在组合模式中,在各自的列中用+/-标记差异。


当前回答

一个更好的解决方案(@KrisNuttycombe提到过):

git diff fc17405...ee2de56

对于合并提交:

commit 0e1329e551a5700614a2a34d8101e92fd9f2cad6 (HEAD, master)
Merge: fc17405 ee2de56
Author: Tilman Vogel <email@email>
Date:   Tue Feb 22 00:27:17 2011 +0100

显示从fc17405上的提交可以到达的ee2de56上的所有更改。注意提交哈希的顺序-它与合并信息中显示的相同:merge: fc17405 ee2de56

还要注意这3个点…而不是两个!

对于已更改文件的列表,您可以使用:

git diff fc17405...ee2de56 --name-only

其他回答

我认为你只需要'git show -c $ref'。在a8e4a59上的git存储库上尝试这个操作会显示一个组合的diff(在两列中的一列中加/减字符)。正如git-show手册提到的,它基本上委托给'git div -tree',所以这些选项看起来很有用。

您可以创建HEAD设置为合并前一次提交的分支。然后,你可以这样做:

git merge --squash testing

这将合并,但不会提交。然后:

git diff

一个更好的解决方案(@KrisNuttycombe提到过):

git diff fc17405...ee2de56

对于合并提交:

commit 0e1329e551a5700614a2a34d8101e92fd9f2cad6 (HEAD, master)
Merge: fc17405 ee2de56
Author: Tilman Vogel <email@email>
Date:   Tue Feb 22 00:27:17 2011 +0100

显示从fc17405上的提交可以到达的ee2de56上的所有更改。注意提交哈希的顺序-它与合并信息中显示的相同:merge: fc17405 ee2de56

还要注意这3个点…而不是两个!

对于已更改文件的列表,您可以使用:

git diff fc17405...ee2de56 --name-only

如果你的合并提交是commit 0e1329e5,如上所述,你可以通过以下方式获得包含在合并中的diff:

git diff 0e1329e5^..0e1329e5

我希望这能有所帮助!

这里似乎回答了: https://public-inbox.org/git/7vd392ezhx.fsf@alter.siamese.dyndns.org/

同理,跑步 $ git diff——cc $M $M^1 $M^2 $(git merge-base $M^1 $M^2) 应该显示一个组合补丁,解释在$M相对于 在父节点和合并基节点中记录的状态。