【发布时间】:2024-01-23 12:41:01
【问题描述】:
我在 Git 存储库的某个地方有一行包含“Foo”这个词,之前有几百次提交。
如果有什么方法可以找到它上次所在的修订号?
【问题讨论】:
标签: git version-control
我在 Git 存储库的某个地方有一行包含“Foo”这个词,之前有几百次提交。
如果有什么方法可以找到它上次所在的修订号?
【问题讨论】:
标签: git version-control
这可以通过gitlog的pickaxe (-S) 选项解决
git log -SFoo -- path_containing_change
(您甚至可以添加时间范围:--since=2009.1.1 --until=2010.1.1)
-S<string>
查找引入或删除
<string>实例的差异。
请注意,这与仅出现在 diff 输出中的字符串不同;有关详细信息,请参阅gitdiffcore(7) 中的镐条目。
diffcore-pickaxe
此转换用于查找表示涉及指定字符串的更改的文件对。
当diffcore-pickaxe正在使用时,它会检查是否存在“原始”端具有指定字符串而“结果”端没有指定字符串的文件对。
这样的文件对表示“出现在此变更集中的字符串”。
它还检查丢失指定字符串的相反情况。
2014 年更新:
git log -p --all -S 'search string'
git log -p --all -G 'match regular expression'
这些日志命令列出添加或删除给定搜索字符串/正则表达式的提交,(通常)较新的优先。
-p(--patch) 选项会导致相关差异显示在添加或删除模式的位置,以便您可以在上下文中看到它。找到添加了您正在查找的文本的相关提交(例如
8beeff00d),找到包含该提交的分支:
git branch -a --contains 8beeff00d
(我在“How to list branches that contain a given commit?”中引用了最后一条命令)
【讨论】:
--pickaxe-all 和 -S 之间的关系可以通过 lists-archives.org/git/… 和 article.gmane.org/gmane.comp.version-control.git/34909 更好地理解
最坏的情况,使用git bisect和grep?
【讨论】: