find lost line by keyword
I had somewhere in my Git repository a line containing word "Foo" a couple hundreds commits before.
If there is any way to find its revision number where it was the last time without buying FishEye?
 That may be addressed by the pickaxe ( -S ) option of gitlog  
 git log -SFoo -- path_containing_change
 (you can even add a time range: --since=2009.1.1 --until=2010.1.1 )  
-S<string>
 Look for differences that introduce or remove an instance of <string> .  
 Note that this is different than the string simply appearing in diff output;  see the pickaxe entry in gitdiffcore(7) for more details.  
diffcore-pickaxe
 This transformation is used to find filepairs that represent changes that touch a specified string.  
 When diffcore-pickaxe is in use, it checks if there are filepairs whose "original" side has the specified string and whose "result" side does not.  
 Such a filepair represents "the string appeared in this changeset".  
 It also checks for the opposite case that loses the specified string.  
Update 2014:
Since then, you can do (from nilbus's answer):
git log -p --all -S 'search string'
git log -p --all -G 'match regular expression'
 These log commands list commits that add or remove the given search string/regex, (generally) more recent first.  
 The -p ( --patch ) option causes the relevant diff to be shown where the pattern was added or removed, so you can see it in context.  
 Having found a relevant commit that adds the text you were looking for (eg. 8beeff00d ), find the branches that contain the commit:  
git branch -a --contains 8beeff00d
(I reference that last command in "How to list branches that contain a given commit?")
最坏的情况下,使用git bisect和grep ? 
上一篇: 不敏感的git镐搜索
下一篇: 按关键字查找丢失的行
