使用Git,如何在所有本地分支的所有文件中搜索给定字符串?
具体到GitHub:是否有可能在所有GitHub分支上执行上述搜索?(在我的远程GitHub存储库中有几个远程分支,理想情况下,我不必为这个搜索而关闭…)
使用Git,如何在所有本地分支的所有文件中搜索给定字符串?
具体到GitHub:是否有可能在所有GitHub分支上执行上述搜索?(在我的远程GitHub存储库中有几个远程分支,理想情况下,我不必为这个搜索而关闭…)
当前回答
如果你使用@manojlds Git grep命令并得到一个错误:
-bash: /usr/bin/git: Argument list too long"
然后你应该使用xargs:
git rev-list --all | xargs git grep "string/regexp"
参见如何在Git历史记录中搜索已提交的代码
其他回答
在许多情况下,git rev-list——all可以返回大量的提交,需要花费很长时间来扫描。如果你不想搜索存储库历史中每个分支上的每个提交,而只想搜索所有分支提示,你可以用git show-ref -s——heads替换它。所以总的来说:
git grep "string" `git show-ref -s --heads`
or:
git show-ref -s --heads | xargs git grep "string"
提示:你可以在文件中写入输出,然后在编辑器中查看:
nano ~/history.txt
git show-ref -s --heads | xargs git grep "search string here" >> ~/history.txt
如果你使用@manojlds Git grep命令并得到一个错误:
-bash: /usr/bin/git: Argument list too long"
然后你应该使用xargs:
git rev-list --all | xargs git grep "string/regexp"
参见如何在Git历史记录中搜索已提交的代码
你可以试试这个:
git log -Sxxxx # Search all commits
git log -Sxxxx --branches[=<pattern>] # Search branches
你可以在Git存储库中这样做:
git grep "string/regexp" $(git rev-list --all)
GitHub高级搜索具有代码搜索功能:
代码搜索将查看GitHub上公开托管的所有代码。你也可以通过:
语言:语言: 存储库名称(含用户名):repo: 文件路径:path:
这里列出的解决方案存在一些问题(甚至可以接受)。
你不需要列出所有的哈希,因为你会得到重复的。而且,它需要更多的时间。
在此基础上,您可以在master和dev as的多个分支上搜索字符串“test -f /”
git grep "test -f /" master dev
这和
printf "master\ndev" | xargs git grep "test -f /"
现在开始。
这将查找所有本地分支的提示的哈希值,并只在那些提交中搜索:
git branch -v --no-abbrev | awk -F' *' '{print $3}' | xargs git grep "string/regexp"
如果你也需要在远程分支中搜索,那么添加-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- | cut -d' ' -f 1 | xargs git grep "string"
# Search in branches, and tags
git show-ref | grep -v "refs/stash" | cut -d' ' -f2 | xargs git grep "string"