我在 git repo 中的当前分支之外有一段代码,我不确定哪个提交和哪个分支。如何在我之前提交的所有文件中搜索特定字符串(然后显示该代码行的周围)?
问问题
24973 次
4 回答
40
用于git grep
定位提交:
git grep "string" $(git rev-list --all)
这git rev-list --all
使得它搜索项目的整个历史。
这将给出如下输出:
<commit>:<path>:<matched line>
然后你可以用git branch --contains
它来找出提交在哪个分支上:
git branch --contains <commit>
于 2012-12-14T11:41:59.373 回答
8
如果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
(更多在“搜索”下的“Pro Git”一书中。)
于 2014-11-12T20:03:12.883 回答
3
如果jszakmeister 的回答给了你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"
于 2018-03-12T20:01:11.790 回答
0
更改分支,git branch "branch-name"
然后git grep "specific string"
在您的存储库根目录中执行。如果您没有太多分支机构,这应该可以让您足够快地到达那里。
于 2012-12-14T10:44:02.603 回答