ファイルXの(わずかに異なる)バージョンを持つ2つの異なる分岐A、Bがあります。
特定のパターンを追加するブランチBからコミットを取得することに興味があります。
私が大まかにしたこと:diff files| grep "^\+" | grep "$PATTERN" | for loop grep -n.. do git blame -L done
これはうまくいきますが、gitで簡単にサポートされているものを見つけるために再作成/循環するかどうか疑問に思います。
もっと良い方法がありますか?
答え1
必要な情報を組み合わせてgit blame
取得できると思います。git merge-base
git blame -n $(git merge-base A B).. -- file | grep -v "^^" | grep "$PATTERN"
これは、AとBの間の共通の祖先を見つけてから、共通の祖先より前のすべての項目を無視し、その共通の祖先git blame
で実行されます(記号は祖先から始まり、現在のヘッドで終わるリビジョンを見ることを示します)。出力に行番号を追加します。次に、共通の祖先以降に変更されなかったすべての行を削除し、最後に変更された行でのみパターンを検索します。非逆方向モードでは、現在ファイル内の行のみが表示されるため、結果にはフィルタとまったく同じように追加または変更された行のみが含まれます。file
..
git blame
-n
grep -v "^^"
grep "$PATTERN"
git blame
^\+