Git责怪删除部分

问题描述

我需要知道谁以及何时使用git删除了源文件的某些部分。不幸的是,似乎git blame并不能直接向我表明这一点,因为当前版本中的文件中完全没有所述部分。有什么建议吗?

解决方法

您可以找到正在更改具有特定字符串的行中的内容的提交。这样,如果您知道内容的内容,则可以查看哪个提交删除了某些行

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

为了找到这些行的写法,您可以在一些非常古老的提交中查看文件:

git show old-commit-hash^:src/path/to/file
,

您在这里有几个选择:

  1. 使用-Ggit log选项来查找添加已删除的提交,该行与已删除的代码匹配:
    git log -G"code that was deleted"
    
    其中指定的字符串也可以是正则表达式
  2. 在行范围内使用-L选项来查找修改这些行的提交:
    git log -L10,20:path/to/file
    
    将列出10
  3. 中的行20path/to/file之间的修改代码的提交
  4. 使用-L选项和已删除的函数的名称:
    git log -Lfoo:path/to/file
    
    将在foo中列出修改path/to/file函数的提交。

一旦您知道删除该代码的提交,就可以轻松确定作者。