36

gitリポジトリの現在のブランチとは別のコードがありますが、どのコミットとどのブランチかわかりません。これまでにコミットしたすべてのファイルで特定の文字列を検索するにはどうすればよいですか(その後、そのコード行の周囲を表示します)?

4

4 に答える 4

40

git grepコミットを見つけるために使用します。

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

プロジェクトのgit rev-list --all全履歴を検索します。

これにより、次のような出力が得られます。

<commit>:<path>:<matched line>

次にgit branch --contains、コミットがどのブランチにあるかを確認するために使用できます。

git branch --contains <commit>
于 2012-12-14T11:41:59.373 に答える
8

上記のgit grep "string"バリエーションで「リストが長すぎる」エラーが発生する場合は、git log -S代わりに使用できます。-Sオプションは、コミットされたファイルの内容を検索します。

git log -S "string"  # look for string in every file of every commit
git log -S "string" -- path/to/file  # only look at the history of the named file

(詳細については、 「検索」の下の「ProGit」の本を参照してください。)

于 2014-11-12T20:03:12.883 に答える
3

jszakmeisterの答えがあなたに応答を与える場合Argument list too long

$ git grep "string" $(git rev-list --all)
-bash: /usr/local/bin/git: Argument list too long

xargs代わりにパイプで接続できます。

$ git rev-list --all | xargs git grep "string"
于 2018-03-12T20:01:11.790 に答える
0

でブランチを変更してから、リポジトリルートで実行しますgit branch "branch-name"git grep "specific string"ブランチが多すぎない場合は、これで十分な速さでそこに到達できます。

于 2012-12-14T10:44:02.603 に答える