使用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 --heads
replace它。 所以总的来说:
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几乎没有问题(甚至被接受)。
- 你不需要列出所有的哈希,因为你会得到重复,也需要更多的时间。
它build立在这个地方,你可以在多个分支master
和dev
上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"