使用Git,如何在所有本地分支的所有文件中搜索给定字符串?

具体到GitHub:是否有可能在所有GitHub分支上执行上述搜索?(在我的远程GitHub存储库中有几个远程分支,理想情况下,我不必为这个搜索而关闭…)


当前回答

忽略大小写使用-i:

git log -i --all --grep='word1 Word2'

其他回答

你可以在Git存储库中这样做:

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

GitHub高级搜索具有代码搜索功能:

代码搜索将查看GitHub上公开托管的所有代码。你也可以通过:

语言:语言: 存储库名称(含用户名):repo: 文件路径:path:

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

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

然后你应该使用xargs:

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

参见如何在Git历史记录中搜索已提交的代码

为了显示分支名称和搜索结果,你可以使用循环分别搜索每个分支,如下所示:

bash 代码

for branch in $(git branch | awk '{print $1}'); do
    echo "Branch: $branch"
    git grep "SEARCH_WORD" $(git rev-parse $branch)
done

这个循环使用git分支列出所有分支,而awk只提取分支名称。然后,它使用git rev-parse来获取每个分支的提交散列,并使用git grep在该分支中搜索字符串“deleteTemplateDocument”。输出将显示分支名称和每个分支的匹配结果。

忽略大小写使用-i:

git log -i --all --grep='word1 Word2'

遵循@peter-mortensen & manojlds的解决方案,我使用git for-each-ref作为子命令,只列出有名称的分支。

git grep "string/regexp" $(git for-each-ref --format='%(refname:short)' refs/heads)

这样可以实现更好的可视化,只显示命名的分支,并且每个分支只生成一个结果。