如何让git diff只显示两次提交之间的差异,而不包括中间的其他提交?
当前回答
只要求两次提交之间的差异而不包括中间的提交是没有意义的。提交只是存储库内容的快照;询问两者之间的区别必然包括它们。那么问题来了,你到底在寻找什么?
正如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
给出这两次提交之间的所有差异。
这将有助于更好地了解您试图实现的目标-正如我提到的,询问两次提交之间的差异而不考虑两者之间的差异实际上是没有意义的。
其他回答
直接在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
在比较提交中阅读更多信息
git diff <a-commit> <another-commit> path
例子:
git diff commit1 commit2 config/routes.rb
它显示了两次提交之间在该文件上的差异。
那么这个呢:
git diff abcdef 123456 | less
如果你想要在运行中比较许多不同的差异,将它管道到less是很方便的。
为了比较12345和abcdef作为补丁的两个git提交,可以使用diff命令作为
diff <(git show 123456) <(git show abcdef)
假设你有这个
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添加?
- Rubymine:如何让Git忽略Rubymine创建的.idea文件
- Gitignore二进制文件,没有扩展名
- Git隐藏错误:Git隐藏弹出并最终与合并冲突
- 了解Git和GitHub的基础知识
- 没有。Git目录的Git克隆
- Git与Mercurial仓库的互操作性
- 忽略git中修改(但未提交)的文件?
- “git restore”命令是什么?“git restore”和“git reset”之间有什么区别?
- Git合并与强制覆盖
- Git拉另一个分支
- 在Bash命令提示符上添加git分支
- 如何更改Git日志日期格式
- git pull -rebase和git pull -ff-only之间的区别
- GitHub -致命:无法读取用户名https://github.com':没有这样的文件或目录