鉴于 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 。然后他可以再次应用提交,差异,并看到一些帅哥减少了。并重复这个过程,直到没有差异。用于达到该点的提交列表是原始后退者从樱桃选择中排除的。
然而,这种半手动方法很困难,并且通过仔细分析差异的每一行,即使长度为几千行,后向传送器也可能会更快。有没有办法编写脚本呢?
答案 0 :(得分:0)
你在寻找这样的东西:
git log -- <file>
在你的情况下
git log -- src/crush