【问题标题】:How to find out in which commit a particular code was added?如何找出在哪个提交中添加了特定代码?
【发布时间】:2013-11-21 09:50:38
【问题描述】:

我想知道我在哪个提交中添加了下面给出的代码:

if (getListView().getChildCount() == 0)
                getActivity().findViewById(android.R.id.empty).setVisibility(View.VISIBLE);

我如何做到这一点?

【问题讨论】:

    标签: git git-commit


    【解决方案1】:
    git log -S searchTerm
    

    为您提供引入搜索词的提交。

    【讨论】:

    • 我认为这是最好的答案,因为 OP 想要搜索添加的一些代码(而不是文件)。
    • 我同意 - 我遇到了一个问题,即所有存储库都经过“重新缩进代码”会话,将制表符从 4 个空格缩小到 2 个。从那一刻起,所有 git blame 将始终显示重新缩进代码的人——而不是介绍代码的人。 git log -S 可以解决问题。
    【解决方案2】:

    在文件上运行git blame。它会向您显示每行的提交 ID、日期和时间以及提交者。然后只需复制提交标识符,您就可以在git log <commit>git show <commit> 中使用它。

    例如,我有一个名为 test.txt 的文件,在不同的提交中添加了行:

    $ cat test.txt
    First line.
    Second line.
    

    运行git blame:

    $ git blame test.txt
    ^410c3dd (Leigh 2013-11-09 12:00:00 1) First line.
    2365eb7d (Leigh 2013-11-09 12:00:10 2) Second line.
    

    第一位是提交ID,然后是名称,然后是日期、时间、时区,最后是行号和行内容。

    【讨论】:

    • 问题在于,这仅显示那些文件最后更改的时间,而不是添加的时间。
    • @ensonic 如果是这种情况,这个答案可能会很有趣(例如,行被移动,或者空格改变):stackoverflow.com/a/5816177/812680
    • 有用的附加是 grep 结果git blame test.txt | grep 'First line'
    • 这没有回答 OP 的问题。我们遇到了一个问题,我们所有的存储库都经历了“重新缩进代码”更改,将制表符从 4 个空格缩小到 2 个。从那一刻起,所有 git blame 将始终显示重新缩进代码的人 - 而不是介绍它的人。 git log -S 可以解决问题。
    【解决方案3】:

    有比对整个文件发出责备更快的方法。如果该行是${lineno},文件是${filename},您可以:

    git blame -L ${lineno},${lineno} ${filename}
    

    例子:

    git blame -L 2,2 test.txt
    

    【讨论】:

    • 这实际上并不能回答问题——除非那行代码从未改变过。它将显示最后更改这些代码行的用户是谁。不是介绍他们的人。不过,git log -S 会。但是,有用的技术...
    • 毫无疑问,正确的解决方案!
    【解决方案4】:
    git log -S "mention here line of code" [file-path]    
    

    例如:

    git log -S "First line" test.txt         
    

    提供文件名及其路径是显而易见的,因为大多数时候,我们想知道是谁在特定文件中引入了特定代码段。

    【讨论】:

    • 对不起,我不明白 - 应该在“提及这里的代码行”中添加什么。行号?实际的行内容?要搜索的文本?你能说清楚一点吗?
    • 好的。我使用了它,我对结果感到惊讶。这是一个救生员。真的。在我们相当笨拙和糟糕的公司存储库中,一些聪明人决定在 120 万行代码中将制表符间距从 4 更改为 2。当然从那一刻起 - git blame 毫无意义 - 因为每条该死的行都被重新缩进源代码的同样讨厌的承诺改变了。所以 - 这真的给了我我需要的绳索 - 找到谁“发明”了一行代码,而不是最后一个改变它的人。谢谢。大手笔。
    • 感谢您的欣赏。
    • 在 Linux 终端中,代码行需要单引号:git log -S 'some code' path/to/file.c
    • 这是救命稻草!谢谢!
    【解决方案5】:

    如果代码在Git 存储库中维护,intellij IDE 以及 Git 插件用于浏览代码,那么我发现以下方式非常直观:

    1. 打开intellij中的文件
    2. 转到上下文菜单 -> Git -> 注释。
    3. 将出现新窗口,其中新窗口中的每一行都会告诉谁提交了该行。

    以下截图仅供参考:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-07
      • 2015-07-01
      • 1970-01-01
      • 2015-05-08
      • 2021-04-19
      • 2020-11-18
      • 1970-01-01
      • 2021-08-06
      相关资源
      最近更新 更多