【问题标题】:can git find out all authors that have ever changed a line of code?git 可以找出所有更改过代码行的作者吗?
【发布时间】:2012-06-20 18:52:08
【问题描述】:

我想找出所有更改了一行代码的作者。 Git-log 可以在文件级别上做到这一点。我阅读了手册页,似乎 git log 无法在行级别上执行此操作。有没有办法使用 git 命令来做,或者我需要自己写一个脚本?

出于我的目的,我想对所有代码行执行此操作。我这样做是为了为我的研究生成作者身份训练数据。

【问题讨论】:

  • 您可以责备/注释以获取每个修订级别的信息。一旦您引入多个修订版,“谁更改了一行”就开始成为一个模糊的问题。
  • @Tomasz:搜索特定行的历史记录非常有用,特别是当您要查看代码库中的错误存在多长时间或谁接触了特定功能时。

标签: git


【解决方案1】:

您想在git log 上组合-S--pretty 标志。

git log 手册页,-S 镐搜索:

   -S<string>
       Look for differences that introduce or remove an instance of <string>. Note that this is different than the string simply appearing in diff output;
       see the pickaxe entry in gitdiffcore(7) for more details.

此标志查找对特定字符串的所有更改。 Using an example from another SO answer, git log -g -Ssearch_for_this 将搜索历史记录以查找对“search_for_this”的所有更改。

将其与--pretty 结合以获得更好的结果。例如,此命令将在历史记录中搜索对 'foo' 的更改并返回缩短的哈希值,然后是作者、两个破折号、消息的第一行、两个破折号和日期:

$ git log -Sfoo --pretty=format:'%h %an -- %s -- %ad'
bc34134 Sally Developer -- Fixed all bugs and made all clients happy forever -- Tue Jan 31 17:41:17 2025 -0500

【讨论】:

  • 你的意思是把该行的内容放在 -S 选项之后吗?这可以帮助我找出更改字符串的提交,但是我仍然需要找出该行的先前形式并继续使用该方法直到没有该行的先前版本?
  • 嗯。是的。此解决方案只会让您了解引入 的位置。如果你想跟踪过去的变化,它是行不通的。也许这个? github.com/renard/git-line-history 通过谷歌找到。不知道它是否有效,但它利用了git blame
猜你喜欢
  • 2013-06-13
  • 2017-11-30
  • 1970-01-01
  • 1970-01-01
  • 2015-04-26
  • 1970-01-01
  • 2017-10-06
  • 2017-12-28
  • 1970-01-01
相关资源
最近更新 更多