使用git在文件的历史版本中进行grep搜索?

33

有没有一条命令可以检查代码库中的文件 foo.c 是否曾包含字符串 "xyz",并打印出它们所在的版本号?

2个回答

43
这将打印出任何包含差异xyz的提交。
git log -Sxyz foo.c

同样的事情,但更易读:
git log -S "xyz" foo.c

1
请参考 https://dev59.com/_FgQ5IYBdhLWcg3wkEzm 以查找相应的暂存内容。如果您将某些内容暂存而非提交,这可能会有所帮助。 - Bruce Adams
对我来说,这只是在日志中搜索而不是在内容中搜索。 - undefined

8

这将打印出包含xyz的差异的任何提交记录。请注意,--将文件名与其余命令分隔开。

git log -Sxyz -- foo.c

没有使用--,我会得到以下错误:
fatal: ambiguous argument 'foo.c': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'

我原本想评论CaptainPicard的答案并提出一个更正,但是我的声望还不够。如果有人想要编辑那个答案以提到这个更正,我将很乐意删除这个答案。


1
目前看来,只有当当前目录中不存在该文件时,git 才需要使用“--”。因此,两个答案都是正确的。 - The Matt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接