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

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


当前回答

这里列出的解决方案存在一些问题(甚至可以接受)。

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

在此基础上,您可以在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"

其他回答

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

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

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

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

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

你可以试试这个:

git log -Sxxxx  # Search all commits
git log -Sxxxx  --branches[=<pattern>]   # Search branches

这里列出的解决方案存在一些问题(甚至可以接受)。

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

在此基础上,您可以在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"

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

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

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

忽略大小写使用-i:

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