Gitを使用して、特定の文字列をすべてのローカルブランチのすべてのファイル内で検索するにはどうすればよいですか?
Github固有:すべてのgithubブランチで上記の検索を実行できますか? (私のリモートgithubリポジトリには、理想的にはこの検索のために停止する必要がない複数のリモートブランチがあります。)
Gitリポジトリでこれを実行できます。
git grep "string/regexp" $(git rev-list --all)
Githubの高度な検索には、コード検索機能があります。
コード検索では、GitHubで公開されているすべてのコードを調べます。次の方法でフィルタリングすることもできます。
language:
repo:
path:
@manojlds git grepコマンドを使用してエラーが発生した場合:
-bash: /usr/bin/git: Argument list too long"
次に、xargsを使用する必要があります。
git rev-list --all | xargs git grep "string/regexp"
git履歴でコミットされたコードをgrep(検索)する方法? も参照してください。
多くの場合 git rev-list --all
は、スキャンに永遠にかかる膨大な数のコミットを返す可能性があります。リポジトリ履歴のすべてのブランチですべてのコミットを検索するのではなく、すべてのブランチのヒントを検索する場合は、git show-ref --heads
。合計で:
git grep "string" `git show-ref --heads`
または:
git show-ref --heads | xargs git grep "string"
Tip:ファイルに出力を書き込んでエディターで表示できます。
nano ~/history.txt
git show-ref --heads | xargs git grep "search string here" >> ~/history.txt
ここにリストされているソリューションには、いくつかの問題があります(受け入れられた場合でも)。
これに基づいて構築され、複数のブランチ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
を追加します。
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 log -Sxxxx #search all commits
git log -Sxxxx --branches[=<pattern>] #search branches