想象一个 git 项目中的一个类,它经历了 1000 次提交,一遍又一遍地重新访问。我有没有机会检查何时(在哪个提交处)将特定的代码行引入类?
如果没有,是否有其他方法可以替代每次提交以找到我特别感兴趣的行集?
泰。
想象一个 git 项目中的一个类,它经历了 1000 次提交,一遍又一遍地重新访问。我有没有机会检查何时(在哪个提交处)将特定的代码行引入类?
如果没有,是否有其他方法可以替代每次提交以找到我特别感兴趣的行集?
泰。
特定的代码行?就像你提前知道线路是什么?当然有可能。事实上,这很愚蠢。只需使用镐搜索选项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>]
您可以git bisect
在引入某些代码时使用回溯(请参阅http://git-scm.com/book/en/Git-Tools-Debugging-with-Git)并且可以使用此技术每次检查代码然后看看这条线是否还存在。这使得搜索 O(log n) 而不是 O(n),从而为您节省了大量时间......
如果您想知道最后一次编辑一行的时间,您可以使用git blame
.