36

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

4

4 回答 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 回答