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


当前回答

直接在GitHub上查看差异;您可以- https://github.com/<username>/<reponame>/compare/<commit1>..<commit2> .

commit1和commit2可以是分支名或commit哈希值

为例:

比较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-helper 比较commit 75e09b1c0f5ae5f51078c7a25fe36d892c5cfcfe和585146a6a7aa70faf25442d7d28636ce57e29588 - https://github.com/twbs/bootstrap/compare/75e09b1c0f5ae5f51078c7a25fe36d892c5cfcfe..585146a6a7aa70faf25442d7d28636ce57e29588

在比较提交中阅读更多信息

其他回答

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

正如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

给出这两次提交之间的所有差异。

这将有助于更好地了解您试图实现的目标-正如我提到的,询问两次提交之间的差异而不考虑两者之间的差异实际上是没有意义的。

假设您想查看提交012345和abcdef之间的差异。以下内容可以达到你的目的:

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

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

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

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

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

alias gdf='git diff HEAD{'^',}' # diff between your recent tow commits

谢谢 @Jinmiao罗


git差别头~2头

在最近的第二次提交和当前之间完成更改。

HEAD方便

检查完整的更改:

  git diff <commit_Id_1> <commit_Id_2>

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

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

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