210

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

我发现这个Search all of Git history for a string?

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

4

4 回答 4

289

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

git log -S'bar' -- foo.rb
于 2012-04-18T18:55:53.163 回答
19

或者也许你可以试试这个(来自相关问题Search all of git history for string

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

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

于 2012-04-19T07:02:55.530 回答
2

git log 命令有一个覆盖(来自手册):

$ git log Makefile      # commits that modify Makefile

所以你可以使用:

git log foo.rb | grep "bar"
于 2012-04-18T18:16:21.457 回答
2

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

于 2020-04-29T11:26:52.967 回答