web-dev-qa-db-ja.com

gitを使用して、すべてのブランチで文字列を検索するにはどうすればよいですか?

Gitを使用して、特定の文字列をすべてのローカルブランチのすべてのファイル内で検索するにはどうすればよいですか?

Github固有:すべてのgithubブランチで上記の検索を実行できますか? (私のリモートgithubリポジトリには、理想的にはこの検索のために停止する必要がない複数のリモートブランチがあります。)

137
Ivar

Gitリポジトリでこれを実行できます。

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

Githubの高度な検索には、コード検索機能があります。

コード検索では、GitHubで公開されているすべてのコードを調べます。次の方法でフィルタリングすることもできます。

  • 言語: language:
  • リポジトリ名(ユーザー名を含む):repo:
  • ファイルパス:path:
140
manojlds

@manojlds git grepコマンドを使用してエラーが発生した場合:

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

次に、xargsを使用する必要があります。

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

git履歴でコミットされたコードをgrep(検索)する方法? も参照してください。

103
teastburn

多くの場合 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
41
Zitrax

ここにリストされているソリューションには、いくつかの問題があります(受け入れられた場合でも)。

  1. 重複を取得するため、すべてのハッシュをリストする必要はありません。また、さらに時間がかかります。

これに基づいて構築され、複数のブランチ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"
12
hIpPy

これを試すことができます

git log -Sxxxx  #search all commits
git log -Sxxxx  --branches[=<pattern>]   #search branches
3
Victor Choy