我如何“混帐”删除线?

git blame非常适合修改和添加行,但是如何才能find特定的以前提交中存在的行最终被删除。 我在想bisect但我希望有更好的方法。

(之前你问:在这种情况下,我只是做了一个git log -p并通过search代码行和(一)一些白痴刚刚删除了在上一个提交的重要线和(二)我是那个白痴]

如果你知道该行的内容,这是一个理想的用例:

 git log -S <string> path/to/file 

其中显示您提交哪些引入或删除该string的实例。 还有-G<regex>-G<regex>做同样的事情! 查看man git-log并search-G-S选项或pickaxe(这些function的友好名称)以获取更多信息。

-S选项实际上也是在git-blame的头文件中提到的,在说明部分,它给出了一个使用git log -S...的例子。

我想你真正想要的是

 git blame --reverse START..END filename 

从手册:

向前走,而不是落后。 这里显示了一行代码的最后一个修订版本,而不是显示一行代码的修订版本。 这需要一系列的修订版本,如START..END,在START中存在责任的path。

git blame reverse ,你可以find最后一行提交的行。你仍然需要得到提交。

您可以使用以下命令来显示反转的git日志。 显示的第一个提交将是该行最后一次出现,下一个提交将被更改或删除。

 git log --reverse --ancestry-path COMMIT^..master 

git blame –reverse可以让你靠近行被删除的地方。 但是实际上并不指向行被删除的版本。 它指向最后一次修订的地方。 那么如果下面的修订是一个简单的提交,你很幸运,你有删除修订。 OTOH,如果下面的版本是一个合并提交 ,那么事情会变得有点狂野。 作为努力创造difflame的一部分,我解决了这个问题,所以如果你已经在你的盒子上安装了python,而且你愿意尝试一下,那就不要再等了,让我知道它是怎么回事。

https://github.com/eantoranz/difflame