按关键字查找丢失的行
我曾在我的Git仓库中的某个地方出现过一个包含单词“Foo”的行,之前有数百个提交。
如果有什么方法可以在没有购买FishEye的情况下最后一次找到它的修订版号?
这可以通过gitlog
的镐 ( -S
)选项来gitlog
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
)选项会使相关的diff显示在添加或删除模式的位置,因此您可以在上下文中看到它。
找到了一个相关的提交,添加了您正在查找的文本(例如8beeff00d
),找到包含提交的分支:
git branch -a --contains 8beeff00d
(我参考了“如何列出包含给定提交的分支的最后一个命令?”)
最坏的情况下,使用git bisect
和grep
?