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