如何使git diff
仅显示两次提交之间的差异,不包括中间的其他提交?
答案 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
\ /
|
...
您要确保A
与A0
相同。
这样可以解决问题:
$ 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 /白痴证明方法。
myRepo_temp
myRepo_original
)中检出您想与之比较的提交/分支。myRepo_temp
和myRepo_original
)使用差异工具(例如“超越比较”等)例如,如果您希望部分撤消某些更改,以便可以将内容从一个文件夹复制到另一个文件夹,这很有用。