如何让git diff只显示两次提交之间的差异,而不包括中间的其他提交?


当前回答

为了比较12345和abcdef作为补丁的两个git提交,可以使用diff命令作为

diff <(git show 123456) <(git show abcdef)

其他回答

你可以简单地将2个提交传递给git diff,就像这样:

-> git diff 0da94be  59ff30c > my.patch
-> git apply my.patch

假设你有这个

A
|
B    A0
|    |
C    D
\   /
  |
 ...

你要确保A等于A0。

这样就可以了:

$ git diff B A > B-A.diff
$ git diff D A0 > D-A0.diff
$ diff B-A.diff D-A0.diff

检查完整的更改:

  git diff <commit_Id_1> <commit_Id_2>

仅检查更改/添加/删除的文件:

  git diff <commit_Id_1> <commit_Id_2> --name-only

注意:对于检查中间没有提交的diff,你不需要输入提交id。

从Git 2.19开始,你可以简单地使用:

Git range-diff rev1 -比较两个提交树,从它们的共同祖先开始

或 Git range-diff rev1~..rev1 rev2 ~ . . rev2 -比较2个提交所带来的变化

美元git日志

commit-1(new/latest/recent commit)
commit-2
commit-3
commit-4
*
*
commit-n(first commit)

$git diff commit-2

显示commit-2到commit-1之间的所有变化(仅仅是commit-1的补丁,相当于git diff HEAD~1 HEAD)

类似的 $git diff commit-4 commit-1

显示commit-4到commit-1之间的所有更改(commit-1的补丁, 一起提交2号和3号。相当于git差头~3头)

$git diff commit-1 commit-2

通过改变订单提交ID,可以获得恢复补丁。 ("$git diff commit-1 commit-2 > revert_patch_of_commit-1.diff")