【问题标题】:Finding when a section of code was removed from a git repository查找何时从 git 存储库中删除了一段代码
【发布时间】:2015-12-30 14:51:20
【问题描述】:

我在旧版软件中的一段代码已从当前版本中删除。我想知道这部分是什么时候从代码库中删除的。目前我这样做的方法是手动将我的集成分支与每个旧提交进行比较,但是在包含代码的文件版本和我当前的版本之间有很多提交。

简而言之,如果我在旧版本中的文件的第 44-52 行上添加了代码,那么新版本中不存在该提交,当它被删除时如何找到提交?

【问题讨论】:

  • 这些行是否仍然存在于文件中但内容不同?在这种情况下,您可以使用blame
  • 没有在某些时候完全删除行。
  • 不管怎样,看看here。提到了一些“镐”..

标签: git diff git-diff


【解决方案1】:

试试git log -S"<code>" -- file_paths,它会显示指定字符串发生变化的提交。

这意味着如果你删除一个代码片段,那么对该代码的引用将减少 1。

例如

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

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

【讨论】:

    【解决方案2】:

    做你想做的事的方法是使用bisect run <script>
    像目前一样使用 bisect,并将 bisect 与 script 选项一起使用。

    脚本将返回适当的跳过代码(或 125 表示不可测试 - 更适合您的情况)。

    请注意,如果当前源代码良好,则脚本应以代码0 退出,如果当前源代码不良,则脚本应以code between 1 and 127(包括)、except 125 退出。

    任何其他退出代码都会中止平分过程。应该注意的是,通过“exit(-1)”终止的程序会留下 $? = 255,(参见 exit(3) 手册页),因为该值被“& 0377”截断。

    当无法测试当前源代码时,应使用特殊退出代码 125。如果脚本使用此代码退出,则将跳过当前版本(参见上面的 git bisect skip)。

    125 被选为用于此目的的最高合理值,因为 POSIX shell 使用126127 来指示特定的错误状态(127 用于未找到命令,126用于找到但不可执行的命令——这些细节无关紧要,因为它们是脚本中的正常错误,就bisect run 而言)。


    演示代码

    Here你可以查看如何使用git bisect的示例代码

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-21
      • 2012-03-02
      • 1970-01-01
      • 1970-01-01
      • 2011-01-04
      • 2011-09-12
      相关资源
      最近更新 更多