如何在没有中间提交的情况下查看两个提交之间的变化?

如何让git diff只显示两个提交之间的差异,而排除中间的其他提交?

你可以简单地把两个提交的内容传递给git diff,比如:

-> git diff 0da94be  59ff30c > my.patch
-> git apply my.patch
评论(14)

询问两个提交之间的差异而不包括中间的提交,是没有意义的。提交只是版本库内容的快照;询问两个提交之间的差异必然包括它们。那么问题来了,你真正要找的是什么?

正如William所建议的,偷梁换柱可以给你一个基于另一个提交的delta。就是说。

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

这就是:{{5911461}}将 "abcdef "的提交与它的直系祖先进行比较,然后在 "012345 "的基础上应用这个差值。然后显示这个新的差异--唯一的变化是上下文来自'012345'而不是'abcdef'的直接祖先。当然,你可能会得到冲突等,所以在大多数情况下这不是一个非常有用的过程。

如果你只是对abcdef本身感兴趣,你可以这样做。

$ git log -u -1 abcdef

这是将abcdef与它的直系祖先单独进行比较,通常是你想要的结果。

当然,还有

$ git diff 012345..abcdef

给你提供了这两个提交之间的所有差异。

这将有助于更好地了解你想要实现的目标--正如我提到的,要求提供两个提交之间的差异而不提供中间的内容实际上是没有意义的。

评论(6)

假设你想看看012345和abcdef这两个提交的区别。 下面的内容应该能满足你的要求。

$ git checkout 012345
$ git cherry-pick -n abcdef
$ git diff --cached
评论(1)