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


当前回答

美元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")

其他回答

我的别名设置在~/。git的Bashrc文件:

alias gdca='git diff --cached' # diff between your staged file and the last commit
alias gdcc='git diff HEAD{,^}' # diff between your latest two commits

那么这个呢:

git diff abcdef 123456 | less

如果你想要在运行中比较许多不同的差异,将它管道到less是很方便的。

只要求两次提交之间的差异而不包括中间的提交是没有意义的。提交只是存储库内容的快照;询问两者之间的区别必然包括它们。那么问题来了,你到底在寻找什么?

正如William所建议的,择优选择可以让您在另一个提交之上重新基于单个提交的增量。那就是:

$ git checkout 012345
$ git cherry-pick -n abcdef
$ git diff --cached

这将接受提交'abcdef',并将其与它的直接祖先进行比较,然后将该差值应用于'012345'。然后显示这个新的差异-唯一的变化是上下文来自'012345'而不是'abcdef的直接祖先'。当然,你可能会有冲突等等,所以在大多数情况下,这不是一个非常有用的过程。

如果你只对abcdef本身感兴趣,你可以这样做:

$ git log -u -1 abcdef

这将单独将abcdef与其直接祖先进行比较,这通常是您想要的结果。

当然

$ git diff 012345..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