在Git中找到一行代码的第一个存在[重复]

Posted

技术标签:

【中文标题】在Git中找到一行代码的第一个存在[重复]【英文标题】:Find first existence of a line of code in Git [duplicate] 【发布时间】:2014-04-10 03:48:08 【问题描述】:

我正在尝试跟踪一段代码(仅一行)到它的提交。

使用 blame 只会将我指向一个提交,其中有问题的行作为提取方法样式重构的一部分被移动。

如果代码库中第一次存在特定文本,我可以使用哪些技术进行提交?

【问题讨论】:

-C 和/或-Mgit blame 是否适合您? git blame 向您展示了第一个存在,但您想忽略移动:但什么算作移动?这有点模糊,这就是为什么git blame 默认不这样做,我认为。 git: finding a commit that introduced a string 和 Using git to find first introduction of token on a specific line of a file 的可能副本。 递归地责备文件是手动/正常的方式(责备,che kout 父提交,责备等) @AD7six git log -S <line>git log -G <regex> 效率更高,工作量更少。 【参考方案1】:

我可能会满足于:

function allcommits  
    git rev-list --reverse HEAD



for i in `allcommits` ;do  
    git co -f $i 2>/dev/null ; 
    echo commit:$i ;
    git grep -q 'that line of code' && break
done

您从第一个提交开始检查每个提交,并在每个步骤中扫描所有文件,直到找到匹配项。

【讨论】:

不要忘记提交,因为 git checkout --force 会终止你的更改。 git log 支持--reverse 选项...【参考方案2】:

我通常使用git log -p filename 并搜索(按/)给定的文本。

这样您会注意到该行的更改,如果文本在过去发生更改,您可以继续搜索(稍微)不同的文本。

【讨论】:

您可以最终以这种方式找到第一次出现的行,但它可能非常低效且耗时。使用git log -S <line>git log -G <regex> 更快更高效。 是的,其他选项可能会更快,但这样您就可以拥有该文件所有提交的整个上下文。【参考方案3】:

如this answer 到git: finding a commit that introduced a string 中所述,您可以简单地使用

git log -S <line>
# or
git log -G <regex>

在存储库中查找第一次出现的代码行。

来自official Linux kernel Git documentation for log

-S<string>

查找引入或删除&lt;string&gt; 实例的差异。请注意,这与仅出现在 diff 输出中的字符串不同;查看gitdiffcore(7) 中的pickaxe 条目了解更多详情。

-G<regex>

查找添加或删除行与给定 &lt;regex&gt; 匹配的差异。

【讨论】:

以上是关于在Git中找到一行代码的第一个存在[重复]的主要内容,如果未能解决你的问题,请参考以下文章

不处理 CSV 中的第一行 [重复]

识别下面一行重复代码的问题。

Android Studio里面编写Kotlin代码的时候,怎么设置将类或者函数的第一个大括号默认位置另起一行?

如何更改 Git 的默认编辑器 [重复]

_CrtDumpMemoryLeaks( ) == 1 在第一行代码?

如何拉伸一行元素中的第一个元素[重复]