Git历史logging – 按关键字查找丢失的行

我曾经在Git仓库的某个地方有一个包含“Foo”这个字的行,这个行几百个之前就提交了。

如果有什么方法可以find它的修订版本号,那么最后一次没有购买FishEye?

这可以通过gitlog-S )选项来gitlog

  git log -SFoo -- path_containing_change 

(你甚至可以添加一个时间范围:– --since=2009.1.1 --until=2010.1.1

 -S<string> 

寻找引入或移除<string>实例的差异。
请注意,这与仅仅出现在差异输出中的string不同。 请参阅gitdiffcore(7)中的镐条目以了解更多细节。

 diffcore-pickaxe 

这个转换用于查找表示触摸指定string的变化的文件对。
当使用diffcore-pickaxe ,它将检查是否有文件对的“原始”一侧有指定的string,而其“结果”一侧没有。
这样的文件对代表“这个变化集中出现的string”。
它还检查丢失指定string的相反情况。


2014年更新:

从那以后,你可以做( 从无 回答的答案 ):

 git log -p --all -S 'search string' git log -p --all -G 'match regular expression' 

这些日志命令列出提交添加或删除给定的searchstring/正则expression式,(通常)更先进的提交。
-p (– --patch )选项会使相关的diff显示在添加或删除模式的位置,所以您可以在上下文中看到它。

find一个相关的提交,添加你正在寻找的文本(例如8beeff00d ),find包含提交的分支:

 git branch -a --contains 8beeff00d 

(我引用“ 如何列出包含给定提交的分支 ”中的最后一个命令? )

最坏的情况下,使用git bisectgrep