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 bisect
和grep
?