我正在尝试将一段代码(仅一行)跟踪到它的提交。
使用责备只会将我指向一个提交,其中有问题的行作为提取方法样式重构的一部分被移动。
如果代码库中第一次存在特定文本,我可以使用哪些技术来完成提交?
正如对git 的回答中所述:找到引入字符串的提交,您可以简单地使用
git log -S <line>
# or
git log -G <regex>
在存储库中查找第一次出现的代码行。
-S<string>
寻找引入或删除
<string>
. 请注意,这与仅出现在 diff 输出中的字符串不同;有关更多详细信息,请参阅gitdiffcore(7)中的镐条目。-G<regex>
查找添加或删除的行与给定的 匹配的差异
<regex>
。
我通常会git log -p filename
搜索(按/)给定的文本。
这样,您会注意到该行的更改,并且如果文本在过去发生更改,您可以继续搜索(稍微)不同的文本。
我可能会满足于:
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
您从第一个提交开始检查每个提交,并扫描每个步骤中的所有文件,直到找到匹配项。