10

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

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

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

4

3 回答 3

15

正如对git 的回答中所述:找到引入字符串的提交,您可以简单地使用

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

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

来自官方 Linux 内核 Git 文档log

-S<string>

寻找引入或删除<string>. 请注意,这与仅出现在 diff 输出中的字符串不同;有关更多详细信息,请参阅gitdiffcore(7)中的条目。

-G<regex>

查找添加或删除的行与给定的 匹配的差异<regex>

于 2014-03-07T10:33:54.627 回答
0

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

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

于 2014-03-07T06:40:53.107 回答
-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

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

于 2014-03-07T06:08:56.090 回答