Git在单个文件历史记录中搜索字符串

JD *_*cks 157 git

因此,如果我有一个名为foo.rb的文件,并且它给我一个名为bar的缺失方法的错误,那么我想搜索foo.rb的历史记录bar以查看该字符串是否曾在过去定义过.

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

但是这会搜索所有文件.我只想在一个文件中搜索.

ral*_*nja 210

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

git log -S'bar' -- foo.rb
Run Code Online (Sandbox Code Playgroud)

  • 或者``git log -G'bar' - foo.rb`来搜索包含'bar'的diff,而不是用于改变'bar'出现次数的提交(参见git-log manpage). (33认同)
  • 它对我不起作用,我不得不使用`-Sbar`来搜索_bar_。也许这与我使用 Windows 命令行有关。 (2认同)

Ant*_*sse 17

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

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

它实际上会查找文件内容,而不会为任何事件发生提交消息/补丁.


sta*_*ons 6

我使用 git log -S "string" --follow -p "path of file"它显示了该字符串的所有更改的完整历史记录。


Mus*_*cim 6

正如@Jakub Nar\xc4\x99bski所提到的,我更喜欢使用正则表达式搜索包含 \'bar\' 的 diff

\n
git log -G\'bar\' -- foo.rb\n
Run Code Online (Sandbox Code Playgroud)\n