如何看到两个提交之间没有提交中间的变化?

你怎么让git diff只显示两个提交之间的区别,排除其他提交之间?

你可以简单地通过2提交git diff像:

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

要求在不包含提交之间的差异/两次提交没有意义。 提交只是存储库内容的快照; 要求两者之间的差异必然包含它们。 那么问题是,你真的在​​找什么?

正如威廉所说,采樱桃可以给你一个单一的承诺重叠另一个三angular洲。 那是:

 $ 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提交12345和abcdef作为补丁,可以使用diff命令

 diff <(git show 123456) <(git show abcdef) 
 git diff <a-commit> <another-commit> path 

例:

 git diff commit1 commit2 config/routes.rb 

它显示了这些提交之间的文件差异。

假设您想查看提交012345和abcdef之间的区别。 以下应该做你想要的:

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

假设你有这个

 A | B A0 | | CD \ / | ... 

你要确保AA0

这将做的伎俩:

 $ git diff BA > BA.diff $ git diff D A0 > D-A0.diff $ diff BA.diff D-A0.diff 

那这个呢:

 git diff abcdef 123456 | less 

如果你想在飞行中比较许多不同的差异,只需将其缩小即可。

其实我还没有find一个很好的解决scheme来实现这个function,但是一个很好的解决scheme就是给你提供你想要的东西。

  1. 复制源目录(拷贝目录A到目录拷贝),
  2. 使用git签出你想要开始的旧提交的修订版(带有强制选项)
  3. 将这些备份的文件复制到原始文件(拷贝目录A拷贝到目录A,除了.git隐藏文件)。
  4. 现在提交的差异将包括所有您对中间所有提交的总结。