我的Git存储库中有一行包含单词“Foo”的行,之前有几百次提交。
如果有没有办法在没有购买FishEye的情况下最后一次找到它的修订号?
答案 0 :(得分:82)
可以通过gitlog
-S
)选项来解决
git log -SFoo -- path_containing_change
(您甚至可以添加时间范围:--since=2009.1.1 --until=2010.1.1
)
-S<string>
查找引入或删除
<string>
实例的差异。
请注意,这与简单地出现在diff输出中的字符串不同;有关详细信息,请参阅gitdiffcore(7)中的pickaxe条目。
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?”中引用了最后一个命令)
答案 1 :(得分:1)
最糟糕的情况是,使用git bisect
和grep
?