squash merge 済みブランチのリベース競合は、内容包含を確認して重複コミットを drop する
Git
トラブルシューティング
マージ
判断
運用
squash merge 済みの作業ブランチを、その merge 後の本流へリベースすると、元の個別コミットは本流の祖先ではないため Git が未適用と見なし、同じ変更同士で競合することがある。この競合を通常の ours/theirs 統合として扱うと、古い中間実装を最新形へ混ぜて退行させる危険がある。
安全な判断は、競合箇所だけでなくコミット系列全体が本流の squash commit に包含されているかを確認したうえで、重複する個別コミットを drop すること。証拠には、squash commit の本文に元コミット列が記録されていること、変更ファイル集合が対応すること、range-diff で個別系列が squash commit の差分へ統合されていること、最終的に本流とブランチ先端の差分が意図どおりゼロまたは残すべき差分だけになることを使う。
一部だけ本流に入っている場合や、squash 後にブランチ側へ追加変更がある場合は系列を丸ごと drop しない。各コミットの内容包含を確認し、未反映分だけを再適用する。完了時は未解決マーカー、作業ツリー、先端 commit、squash commit の祖先関係を確認する。