git提交什么是造成差异的原因?

时间:2015-02-18 10:08:31

标签: git

鉴于 git diff origin / firefly origin / master - src / crush 的输出,我怎样才能找到对它们负责的提交?

类似的东西:

$ git blame-diff origin/firefly origin/master -- src/crush
58ea017 crush: CrushTester: add test_with_crushtool()
e10417d CrushTreeDumper.h: prefer ++operator for non-primitive iterator

用例是当一个子目录( src / crush )从 master 反向移植到稳定分支 firefly 时。我们不是挑选相关的提交,而是排除那些不应该向后移植的东西,而不是挑选其他的东西。换句话说:我们保持 src / crush 目录同步,除了一些选定的提交。

执行向后移植的人知道哪些提交没有被挑选,但是......他忘了列出它们。该backport的评论者有几十个樱桃选择提交合并到 firefly 稳定分支,包括一些冲突解决方案。由于存在冲突,他无法使用 git cherry 来排除已排除的提交。

与要审核的提交的聚合大小相比,diff输出较小。如果评论者能够找出 master 中的哪些提交引入了帅哥,那么检查所有帅哥确实属于一系列不得向后移植的补丁会更容易。这将有助于找出一个大块是否意外向后移植,虽然它不应该。或者,如果缺少应该向后移植的大块。

backported可以使用来自差异块的linestart和lineend git log -L linestart,lineend:src / crush / CrushWrapper.h 。然后他可以再次应用提交,差异,并看到一些帅哥减少了。并重复这个过程,直到没有差异。用于达到该点的提交列表是原始后退者从樱桃选择中排除的。

然而,这种半手动方法很困难,并且通过仔细分析差异的每一行,即使长度为几千行,后向传送器也可能会更快。有没有办法编写脚本呢?

1 个答案:

答案 0 :(得分:0)

你在寻找这样的东西:

 git log -- <file>

在你的情况下

 git log -- src/crush