5

想象一个 git 项目中的一个类,它经历了 1000 次提交,一遍又一遍地重新访问。我有没有机会检查何时(在哪个提交处)将特定的代码行引入类?

如果没有,是否有其他方法可以替代每次提交以找到我特别感兴趣的行集?

泰。

4

2 回答 2

10

特定的代码行?就像你提前知道线路是什么?当然有可能。事实上,这很愚蠢。只需使用镐搜索选项git log

-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.

假设类是public class Foo {,您可以找到每个触及该字符串的提交:

git log -S"public class Foo"

如果您想将其限制为特定文件,只需使用标准--语法:

git log -S"public class Foo" -- Foo.java

一般来说,使用这个:

git log -S<string> [-- <file>]
于 2012-08-17T12:24:13.900 回答
3

您可以git bisect在引入某些代码时使用回溯(请参阅http://git-scm.com/book/en/Git-Tools-Debugging-with-Git)并且可以使用此技术每次检查代码然后看看这条线是否还存在。这使得搜索 O(log n) 而不是 O(n),从而为您节省了大量时间......

如果您想知道最后一次编辑一行的时间,您可以使用git blame.

于 2012-08-17T11:49:39.540 回答