如何看到两个提交之间没有提交中间的变化?
你怎么让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 \ / | ...
你要确保A
和A0
。
这将做的伎俩:
$ 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就是给你提供你想要的东西。
- 复制源目录(拷贝目录A到目录拷贝),
- 使用git签出你想要开始的旧提交的修订版(带有强制选项)
- 将这些备份的文件复制到原始文件(拷贝目录A拷贝到目录A,除了.git隐藏文件)。
- 现在提交的差异将包括所有您对中间所有提交的总结。