如何查看两次提交之间的更改而不提交中间的提交?

时间:2009-07-28 00:02:40

标签: git diff

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

14 个答案:

答案 0 :(得分:543)

你可以简单地将2次提交传递给git diff,如:

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

答案 1 :(得分:127)

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

正如威廉所建议的那样,采摘樱桃可以让你在另一个之上重新定位一个单一的提交。那就是:

$ 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 :(得分:71)

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

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

答案 3 :(得分:57)

git diff <a-commit> <another-commit> path

示例:

git diff commit1 commit2 config/routes.rb

它显示了那些提交之间该文件的差异。

答案 4 :(得分:14)

让我们说你有这个

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

您要确保AA0相同。

这样可以解决问题:

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

答案 5 :(得分:12)

假设您想要查看提交012345和abcdef之间的区别。以下应该做你想要的:

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

答案 6 :(得分:9)

这个怎么样:

git diff abcdef 123456 | less

如果你想在飞行中比较许多不同的差异,那么只需将它管道化就可以了。

答案 7 :(得分:5)

用于检查完整的更改:

  git diff <commit_Id_1> <commit_Id_2>

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

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

注意:要检查diff,而无需在之间进行提交,则无需放置提交ID。

答案 8 :(得分:2)

我在alias文件中的~/.bashrc的{​​{1}}设置:

git diff

英语不是我的母语,请原谅输入错误

答案 9 :(得分:1)

$ git log

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

$ git diff commit-2 commit-1

显示从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 diff HEAD~3 HEAD

$ git diff commit-1 commit-2

通过更改订单提交ID,可以获取 revert patch 。 (“ $ git diff commit-1 commit-2> revert_patch_of_commit-1.diff”)

答案 10 :(得分:0)

我编写了一个脚本,该脚本显示两次提交之间的差异,在Ubuntu上效果很好。

https://gist.github.com/jacobabrahamb4/a60624d6274ece7a0bd2d141b53407bc

scalar deleting destructor'

答案 11 :(得分:0)

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

git range-diff <rev1>...<rev2>

答案 12 :(得分:0)

我在alias文件中的~/.zshrc的{​​{1}}设置:

git diff

谢谢 @罗金m

答案 13 :(得分:0)

让我介绍在这种情况下可以采用的简便的GUI /白痴证明方法。

  1. 将您的仓库的另一个副本克隆到新文件夹中,例如myRepo_temp
  2. 在原始存储库(myRepo_original)中检出您想与之比较的提交/分支。
  3. 现在您可以对这两个文件夹(myRepo_tempmyRepo_original)使用差异工具(例如“超越比较”等)

例如,如果您希望部分撤消某些更改,以便可以将内容从一个文件夹复制到另一个文件夹,这很有用。