协慌网

登录 贡献 社区

如何查看两次提交之间的更改而中间没有提交?

如何使git diff仅显示两次提交之间的差异,而不包括两者之间的其他提交?

答案

您可以简单地将 2 次提交传递给 git diff,例如:

-> git diff 0da94be  59ff30c > my.patch
-> git apply my.patch

要求两次提交之间的差异而不包含两次之间的提交几乎没有道理。提交只是存储库内容的快照;要求两者之间的差异必然包括它们。那么问题来了,您到底在寻找什么?

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

为您提供了这两次提交之间的所有差异。

这将有助于更好地了解您要实现的目标 - 正如我提到的那样,在两次提交之间没有区别的情况下要求两者之间的区别实际上是没有意义的。

要将两个 git commit 12345 和 abcdef 作为补丁进行比较,可以使用 diff 命令作为

diff <(git show 123456) <(git show abcdef)