任意のブランチに文字列を導入した Git コミットを見つけるにはどうすればよいでしょうか? 質問する

任意のブランチに文字列を導入した Git コミットを見つけるにはどうすればよいでしょうか? 質問する

どのブランチのどのコミットでも導入された特定の文字列を見つけられるようにしたいのですが、どうすればよいですか? 何かを見つけました (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>

ソリューションが遅いかどうかは、実際には問題ではありません。

ベストアンサー1

できるよ:

git log -S <search string> --source --all

固定文字列 を追加または削除したすべてのコミットを検索しますsearch string--allパラメータは、すべてのブランチから開始することを意味し、どのブランチがそのコミットの検索につながったかを示します。各コミットで導入されるパッチも表示するために--source追加することが役立つことがよくあります。-p

gitのバージョン1.7.4以降にも、同様の-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

おすすめ記事