Gitを使用して、特定の文字列をすべてのローカルブランチのすべてのファイル内で検索するにはどうすればよいですか?
GitHub固有:すべてのGitHubブランチで上記の検索を実行できますか?(リモートGitHubリポジトリにはいくつかのリモートブランチがあり、理想的にはこの検索のためにダウンさせる必要はありません...)
Gitを使用して、特定の文字列をすべてのローカルブランチのすべてのファイル内で検索するにはどうすればよいですか?
GitHub固有:すべてのGitHubブランチで上記の検索を実行できますか?(リモートGitHubリポジトリにはいくつかのリモートブランチがあり、理想的にはこの検索のためにダウンさせる必要はありません...)
回答:
これはGitリポジトリで実行できます。
git grep "string/regexp" $(git rev-list --all)
GitHubの高度な検索には、コード検索機能があります。
コード検索は、GitHubで公開されているすべてのコードを調べます。次の条件でフィルタリングすることもできます。
language:
repo:
path:
git grep ...
。他の回答を見てください。受け入れられた回答としてマークされていますが、この回答よりもはるかに優れています。
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"
ヒント:出力をファイルに書き込んで、エディターで表示できます。
nano ~/history.txt
git show-ref --heads | xargs git grep "search string here" >> ~/history.txt
git show-ref --heads
ハッシュと参照名をリストするので、2番目の行で2回検索されます。git show-ref --heads | cut -d' ' -f2
ref名のみをリストするので、より良いです。
git show-ref --heads -s
SHA1ハッシュのみを出力します。また、同じコミットを指す複数のブランチがある場合、重複があります。次のsort -u
ようにして削除できますgit show-ref --heads -s | sort -u | xargs git grep ...
function gsearch { git grep $1 $(git show-ref --heads) | grep "refs/heads" | grep $1 } # last grep to keep grep color highlight
ここにリストされている解決策にはいくつかの問題があります(受け入れられても)。
重複するため、すべてのハッシュをリストする必要はありません。また、時間がかかります。
あなたは文字列を検索することができる場所、それがこの上に構築"test -f /"
複数のブランチ上master
とdev
などを
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 branch -a | cut -c3- | cut -d' ' -f 1 | xargs git grep "string"
または->
、ローカルからリモートへのブランチ関係を示すファイルリスト内のシンボルで失敗します
あなたはこれを試すことができます:
git log -Sxxxx # Search all commits
git log -Sxxxx --branches[=<pattern>] # Search branches
git log --all -s"search_string"