我如何“混帐”删除线?
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,而且你愿意尝试一下,那就不要再等了,让我知道它是怎么回事。