如何让git diff
只显示两个提交之间的差异,而不包括中间的其他提交?
你可以简单地将两个提交传递给git diff:
-> git diff 0da94be 59ff30c > my.patch
-> git apply my.patch
仅比较两个提交之间的差异,而不包括它们之间的提交,其意义不大。提交只是存储库内容的快照;要求两个提交之间的差异必然包括它们。那么问题就是,你真正想找什么?
正如William所建议的,cherry-picking可以让你获得一个单独提交的增量,在另一个提交之上重新进行了基础变更。也就是说:
$ 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
此命令会给出这两个提交之间的所有差异。
更好地了解您想要实现的目标将有所帮助-正如我提到的,如果没有介于两个提交之间的内容,要求两个提交之间的区别实际上是没有意义的。
origin/featurebranch#HEAD
和 local/featurebranch#HEAD
可以帮助你确保在解决冲突期间没有出现问题。 - lefnirediff -u <(git show 123456) <(git show abcdef)
git diff <(git show 123456) <(git show abcdef)
不能正常工作;diff <(...) <(...)
可以。(我刚试过了)。 - Menachemdiff
的输出进行差异比较。这涉及到读取和比较两个输入流。diff
(GNU或Unix的diff
)可以做到这一点,而git diff
则不能。有些人可能会想知道为什么要这样做。我现在正在处理这个问题,清理一个出现问题的合并。 - Menachemgit diff <a-commit> <another-commit> path
例子:
git diff commit1 commit2 config/routes.rb
它显示了这个文件在那些提交之间的差异。
检查完整的更改:
git diff <commit_Id_1> <commit_Id_2>
仅检查已更改/添加/删除的文件:
git diff <commit_Id_1> <commit_Id_2> --name-only
注意: 如果想在提交之间检查差异,您无需放置提交 ID。
假设你有这个
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 range-diff B..A D..A0
。 - Thomas Guyot-Sionnest假设你想要查看提交记录012345和abcdef之间的差异。你可以执行以下命令:
$ git checkout 012345 $ git cherry-pick -n abcdef $ git diff --cached
https://github.com/<username>/<reponame>/compare/<commit1>..<commit2>
commit1
和 commit2
可以是分支名称或提交哈希值
例如:
gs/add-explicit-paths-to-js-files
与gs/add-history-helper
进行比较 - https://github.com/twbs/bootstrap/compare/gs/add-explicit-paths-to-js-files..gs/add-history-helper75e09b1c0f5ae5f51078c7a25fe36d892c5cfcfe
与585146a6a7aa70faf25442d7d28636ce57e29588
进行比较 - https://github.com/twbs/bootstrap/compare/75e09b1c0f5ae5f51078c7a25fe36d892c5cfcfe..585146a6a7aa70faf25442d7d28636ce57e29588了解更多请参阅比较提交
git diff abcdef 123456 | less
如果你想比较多个不同的diff,只需将它们通过管道传递给less工具即可。
git diff
;无论如何,重要的是 "git diff" 始终涉及两个端点,并且始终跳过中间的提交。 - Jakub Narębski