使用git,我怎么能search所有分支的string?

使用git,我怎么能search所有本地分支的所有文件中给定的string?

Github的具体情况:是否有可能在所有Github分支上执行上述search? (在我的远程github回购有几个远程分支,理想情况下,我不会为这次search降下..)

你可以在Git仓库上做这件事:

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

Github高级search具有代码searchfunction:

代码search将查看所有公开托pipe在GitHub上的代码。 您也可以按照以下方式过滤

  • 语言: language:
  • 存储库名称(包括用户名): repo:
  • 文件path: path:

如果你使用@manojlds git grep命令,并得到一个错误:

 -bash: /usr/bin/git: Argument list too long" 

那么你应该使用xargs:

 git rev-list --all | xargs git grep "string/regexp" 

另请参阅如何grep(search)git历史logging中提交的代码?

在许多情况下, git rev-list --all都可以返回大量的提交永久扫描。 如果您不是通过search仓库历史logging中每个分支上的每个提交,而只是想search所有分支提示,则可以使用git show-ref --headsreplace它。 所以总的来说:

 git grep "string" `git show-ref --heads` 

要么:

 git show-ref --heads | xargs git grep "string" 

提示:您可以将输出写入文件以在编辑器中查看。

 nano ~/history.txt git show-ref --heads | xargs git grep "search string here" >> ~/history.txt 

这里列出的解决scheme几乎没有问题(甚至被接受)。

  1. 你不需要列出所有的哈希,因为你会得到重复,也需要更多的时间。

它build立在这个地方,你可以在多个分支masterdev上searchstring"test -f /"

 git grep "test -f /" master dev 

这是一样的

 printf "master\ndev" | xargs git grep "test -f /" 

所以在这里。

这为所有本地分支的尖端find散列,并且只在这些提交中search。

 git branch -v --no-abbrev | awk -F' *' '{print $3}' | xargs git grep "string/regexp" 

如果您还需要在远程分支中search,则添加-a

 git branch -a -v --no-abbrev | awk -F' *' '{print $3}' | xargs git grep "string/regexp" 

更新:

 # search in local branches git branch | cut -c3- | xargs git grep "string" # search in remote branches git branch -r | cut -c3- | xargs git grep "string" # search in all (local and remote) branches git branch -a | cut -c3- | xargs git grep "string" # search in branches, and tags git show-ref | grep -v "refs/stash" | cut -d' ' -f2 | xargs git grep "string"