1. ホーム
  2. git

[解決済み] 任意のブランチで文字列を導入した Git コミットを見つけるには?

2022-03-21 09:23:33

質問

の任意のコミットで導入された特定の文字列を検索できるようにしたいのです。 どのブランチでもいいのですが、どうすればいいのでしょうか?私は何かを見つけました(私はWin32用に変更した)。 しかし git whatchanged は、異なるブランチを調べていないようです。 (py3kの塊は無視してください。msys/winの改行修正です)

git whatchanged -- <file> | \
grep "^commit " | \
python -c "exec(\"import sys,msvcrt,os\nmsvcrt.setmode(sys.stdout.fileno(), os.O_BINARY)\nfor l in sys.stdin: print(l.split()[1])\")" | \
xargs -i% git show origin % -- <file>

ソリューションが遅くても、別にいいんです。

どのように解決するのですか?

することができます。

git log -S <whatever> --source --all

を追加または削除したすべてのコミットを検索するには、次のようにします。 固定文字列 whatever . その --all パラメータは、すべてのブランチから開始することを意味し --source は、どのブランチがそのコミットを見つけるに至ったかを示すことを意味します。 を追加すると便利です。 -p を使えば、それぞれのコミットが導入するパッチも表示することができます。

1.7.4以降のgitのバージョンにも、同様の -G オプションがあり、これは正規表現 . これは実際には異なる(そしてむしろより明白な)セマンティクスを持っており、以下で説明します。 濱野純夫氏のブログ記事 .

として サメーラ がコメントで指摘しているように、検索語にスペースやその他の特殊文字が含まれる場合などには、引用符で囲む必要があります。

git log -S 'hello world' --source --all
git log -S "dude, where's my car?" --source --all

以下は -G の出現を見つけるために function foo() { :

git log -G "^(\s)*function foo[(][)](\s)*{$" --source --all