Git-Repo在所有已提交的文件中搜索String(未知分支和提交)

时间:2012-12-14 10:38:27

标签: git

我的git repo中有一段代码而不是我当前的分支,我不确定哪个提交和哪个分支。我如何搜索到目前为止为特定字符串提交的所有文件(之后显示该行代码的周围)?

4 个答案:

答案 0 :(得分:18)

使用git grep找到提交:

git grep "string" $(git rev-list --all)

git rev-list --all使其搜索项目的整个历史记录。

这将产生如下输出:

<commit>:<path>:<matched line>

然后,您可以使用git branch --contains找出提交所在的分支:

git branch --contains <commit>

答案 1 :(得分:3)

如果上面的git grep "string"变体给您“列出太长”错误,则可以使用git log -S代替。 -S选项搜索已提交文件的内容:

git log -S "string"  # look for string in every file of every commit
git log -S "string" -- path/to/file  # only look at the history of the named file

(更多内容见"searching"下的“Pro Git”一书。)

答案 2 :(得分:1)

使用git branch "branch-name"更改分支,然后在存储库根目录中执行git grep "specific string"。如果你没有太多的分支,这应该让你足够快。

答案 3 :(得分:1)

如果jszakmeister's answer为您提供Argument list too long回复:

$ git grep "string" $(git rev-list --all)
-bash: /usr/local/bin/git: Argument list too long

您可以将其导入xargs而不是:

$ git rev-list --all | xargs git grep "string"