在Git存储库中查找代码段何时被删除

4

我在一份旧版本的软件中有一段代码,但在当前版本中已被移除。我想找出这段代码是何时从代码库中被移除的。目前我的做法是手动比较我的集成分支和每个旧提交之间的差异,但是在拥有包含该代码的文件版本和当前版本之间的提交太多了。

简而言之,如果我在旧版本的文件中有44-52行的代码,在新版本中不存在,我该如何找到移除它的提交?


这些行是否仍然存在于文件中但内容不同呢?在这种情况下,您可以使用“blame”。 - Eugene Sh.
没有这些行已经被完全删除了。 - jrahme
2
可能是重复的问题,参考如何“责备”已删除的行 - Yaroslav Admin
无论如何,请看这里:https://git-scm.com/docs/git-blame。有一些“pickaxe”的提及... - Eugene Sh.
2个回答

8

尝试使用git log -S"<code>" -- <file path(s)>命令,它会显示有指定字符串变化的提交记录。

这意味着如果您删除了一段代码,则对该代码的引用次数将减少1次。

例如

git log -S"hello world" -- src/

这将显示添加或删除“hello world”的提交记录。


1
你想要做的是使用bisect run <script>。像之前一样使用bisect,并使用带有脚本选项的bisect。
脚本将返回适当的代码以进行跳过(或在您的情况下更适合的125不可测试)。
请注意,如果当前源代码正确,则脚本应该以0的代码退出,如果当前源代码错误,则应该以1到127之间的代码(包括1和127),除了125退出。任何其他退出代码都将中止二分过程。需要注意的是,通过“exit(-1)”终止的程序会留下$? = 255(请参阅exit(3)手册页),因为该值被截断为“& 0377”。当无法测试当前源代码时,应使用特殊的退出代码125。如果脚本以此代码退出,则将跳过当前修订版(请参见上面的git bisect skip)。选择使用125作为此目的的最高合理值,因为126127由POSIX shell用于信号特定的错误状态(127用于未找到命令,126用于找到但不可执行的命令---这些细节并不重要,就bisect run而言,它们是脚本中的正常错误)。

演示代码

这里您可以查看如何使用 git bisect 的示例代码。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接