因此,如果我有一个名为foo.rb的文件,并且给我一个名为bar的缺少方法的错误,那么我想搜索的历史记录 foo.rb该字符串,bar以查看该字符串是否在过去定义过。
我找到了这个 搜索所有Git历史记录中的字符串?
但这会搜索所有文件。我只想在一个文件中搜索。
因此,如果我有一个名为foo.rb的文件,并且给我一个名为bar的缺少方法的错误,那么我想搜索的历史记录 foo.rb该字符串,bar以查看该字符串是否在过去定义过。
我找到了这个 搜索所有Git历史记录中的字符串?
但这会搜索所有文件。我只想在一个文件中搜索。
Answers:
为此,您可以使用-S选项来git log:
git log -S'bar' -- foo.rb
git log -G'bar' -- foo.rb搜索包含“ bar”的diff,而不是查找更改了“ bar”出现次数的提交(请参阅git-log联机帮助页)。
-Sbar它来搜索bar。也许与使用Windows命令行有关。
-G是用于正则表达式搜索的……这也是一个很好的参考:stackoverflow.com/a/4472267/2586761
或者,也许您可以尝试这一步(从相关问题中搜索所有git历史记录以获取string)
git rev-list --all foo.rb | (
while read revision; do
git grep -F 'bar' $revision foo.rb
done
)
它实际上将查找文件内容,而不提交任何出现bar的消息/补丁。
for /F %i in ('git rev-list --all foo.rb') git grep -F bar %i foo.rb如果文件名或搜索词有空格,请注意双引号)
for /F %i in ('git rev-list --all foo.rb') do git grep -F bar %i foo.rb 如果文件名或搜索短语有空格,请注意双引号)
git log命令有一个替代(来自manual):
$ git log Makefile # commits that modify Makefile
因此,您可以使用:
git log foo.rb | grep "bar"
--full-diff如果没有-p,至少在git 1.7.9.5
-- filename如果要将其限制为一个文件,则可以追加一堆git命令。