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