Git历史记录 - 按关键字查找丢失的行

时间:2010-05-15 07:10:53

标签: git version-control

我的Git存储库中有一行包含单词“Foo”的行,之前有几百次提交。

如果有没有办法在没有购买FishEye的情况下最后一次找到它的修订号?

2 个答案:

答案 0 :(得分:82)

可以通过gitlog

pickaxe -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年更新:

从那以后,你可以(从nilbusanswer):

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 bisectgrep