使用Git,如何在所有本地分支的所有文件中搜索给定的字符串?GitHub特定:是否可以在所有GitHub分支上执行上述搜索?(在我的远程GitHub仓库中有几个远程分支,理想情况下我不需要关闭这些分支来进行搜索...)
qoefvg9y1#
你可以在Git仓库中执行此操作:
git grep "string/regexp" $(git rev-list --all)
GitHub高级搜索具有代码搜索功能:代码搜索将搜索GitHub上所有公开托管的代码。您也可以通过以下方式进行筛选:
language:
repo:
path:
ejk8hzay2#
如果您使用@manojlds Git grep命令并得到一个错误:
-bash: /usr/bin/git: Argument list too long"
那么您应该使用xargs:
git rev-list --all | xargs git grep "string/regexp"
另请参见 * How to grep (search) committed code in the Git history *
kjthegm63#
在很多情况下,git rev-list --all会返回大量的提交,扫描时间很长。如果你不想搜索仓库历史记录中每个分支上的每个提交,而只想搜索所有的分支提示,你可以用git show-ref -s --heads来替换它。
git rev-list --all
git show-ref -s --heads
git grep "string" `git show-ref -s --heads`
或:
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
62o28rlo4#
这里列出的解决方案存在一些问题(甚至可以接受)。你不需要列出所有的哈希值,因为你会得到重复的。而且,它需要更多的时间。在此基础上,您可以在多个分支master和dev上搜索字符串"test -f /",如下所示
master
dev
"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:
-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"
sycxhyv75#
你可以试试这个:
git log -Sxxxx # Search all commits git log -Sxxxx --branches[=<pattern>] # Search branches
v9tzhpje6#
按照@peter-mortensen和manojlds的解决方案,我使用git for-each-ref作为子命令,只列出带有名称的分支。
git for-each-ref
git grep "string/regexp" $(git for-each-ref --format='%(refname:short)' refs/heads)
这样可以实现更好的可视化,只显示命名分支,并且每个分支只生成一个结果。
6vl6ewon7#
要将分支名称与搜索结果沿着显示,可以使用循环分别搜索每个分支,如下所示: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”,输出将显示分支名称和每个分支的匹配结果。
z9gpfhce8#
要忽略大小写,请使用-i:
git log -i --all --grep='word1 Word2'
8条答案
按热度按时间qoefvg9y1#
你可以在Git仓库中执行此操作:
GitHub高级搜索具有代码搜索功能:
代码搜索将搜索GitHub上所有公开托管的代码。您也可以通过以下方式进行筛选:
language:
repo:
path:
ejk8hzay2#
如果您使用@manojlds Git grep命令并得到一个错误:
那么您应该使用xargs:
另请参见 * How to grep (search) committed code in the Git history *
kjthegm63#
在很多情况下,
git rev-list --all
会返回大量的提交,扫描时间很长。如果你不想搜索仓库历史记录中每个分支上的每个提交,而只想搜索所有的分支提示,你可以用git show-ref -s --heads
来替换它。或:
62o28rlo4#
这里列出的解决方案存在一些问题(甚至可以接受)。
你不需要列出所有的哈希值,因为你会得到重复的。而且,它需要更多的时间。
在此基础上,您可以在多个分支
master
和dev
上搜索字符串"test -f /"
,如下所示这和
那就这样吧。
这会找到所有本地分支的哈希值,并且只在那些提交中搜索:
如果您还需要搜索远程分支,则添加
-a
:此外:
sycxhyv75#
你可以试试这个:
v9tzhpje6#
按照@peter-mortensen和manojlds的解决方案,我使用
git for-each-ref
作为子命令,只列出带有名称的分支。这样可以实现更好的可视化,只显示命名分支,并且每个分支只生成一个结果。
6vl6ewon7#
要将分支名称与搜索结果沿着显示,可以使用循环分别搜索每个分支,如下所示:
bash码
这个循环使用git分支列出所有分支,awk只提取分支名称,然后使用git rev-parse获取每个分支的提交哈希值,使用git grep在该分支中搜索字符串“deleteTemplateDocument”,输出将显示分支名称和每个分支的匹配结果。
z9gpfhce8#
要忽略大小写,请使用-i: