如果我有一个名为foo的文件。rb,它给了我一个关于缺少bar方法的错误,所以我想搜索foo的历史。Rb的字符串条,看看它是否在过去被定义过。

我发现这个搜索所有Git历史的字符串?

但这将搜索所有文件。我只想在一个文件中搜索。


有一个覆盖git日志命令(来自manual):

$ git log Makefile      # commits that modify Makefile

所以你可以用:

git log foo.rb | grep "bar"

为此,你可以使用-S选项git log:

git log -S'bar' -- foo.rb

或者你可以试试这个(从相关问题搜索所有git历史字符串)

git rev-list --all foo.rb | (
    while read revision; do
        git grep -F 'bar' $revision foo.rb
    done
)

它实际上会查找文件内容,而不会提交任何bar事件的消息/补丁。


我使用 git log -S "string"——follow -p "文件路径",显示该字符串所有更改的完整历史。


正如@Jakub narabbski所提到的,我更喜欢正则表达式搜索包含“bar”的diff

git log -G'bar' -- foo.rb