在Git中找到一行代码的第一个存在[重复]
Posted
技术标签:
【中文标题】在Git中找到一行代码的第一个存在[重复]【英文标题】:Find first existence of a line of code in Git [duplicate] 【发布时间】:2014-04-10 03:48:08 【问题描述】:我正在尝试跟踪一段代码(仅一行)到它的提交。
使用 blame 只会将我指向一个提交,其中有问题的行作为提取方法样式重构的一部分被移动。
如果代码库中第一次存在特定文本,我可以使用哪些技术进行提交?
【问题讨论】:
-C
和/或-M
到git 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>
查找引入或删除
<string>
实例的差异。请注意,这与仅出现在 diff 输出中的字符串不同;查看gitdiffcore(7) 中的pickaxe 条目了解更多详情。-G<regex>
查找添加或删除行与给定
<regex>
匹配的差异。
【讨论】:
以上是关于在Git中找到一行代码的第一个存在[重复]的主要内容,如果未能解决你的问题,请参考以下文章
Android Studio里面编写Kotlin代码的时候,怎么设置将类或者函数的第一个大括号默认位置另起一行?