トラブルシューティング

rebase 中のコンフリクト対処法

rebase 中にコンフリクトが発生した場合の対処法と、中断・継続の判断基準

rebase 中のコンフリクト対処法 diagram

rebase 中のコンフリクトとは

rebase はコミットを一つずつ別のベースに再適用する操作です。

各コミットを適用する際に、同じ箇所が変更されているとコンフリクト(競合)が発生します。

merge と異なり、複数のコミットを再適用するため、1回の rebase で何度もコンフリクトが発生する可能性があります。

コンフリクトを解決して続行する

  1. git status でコンフリクトしたファイルを確認

    rebase は一時停止しており、「Unmerged paths」に該当ファイルが並びます。

  2. ファイルを編集してマーカーを解消

    <<<<<<< ======= >>>>>>> のコンフリクトマーカーを取り除き、正しい内容に整えます。

  3. git add でステージング

    解消したファイルをステージすると Git が「解決済み」と認識します。

  4. git rebase --continue で次のコミットへ

    次のコミットの適用に進みます。さらにコンフリクトが出たら 1 からの流れを繰り返します。

bash
# 1. コンフリクトしたファイルを確認
git status

# 2. ファイルを編集してコンフリクトを解決

# 3. 解決したファイルをステージ
git add resolved-file.txt

# 4. rebase を続行
git rebase --continue

コミットをスキップする / rebase を中断する

  • git rebase --skip

    現在のコミットを適用せずにスキップします。適用不要なコミットがあるときに使います。

  • git rebase --abort

    rebase 自体を取りやめ、開始前の状態に完全に戻します。何も失われません。

  • コンフリクトが多すぎるときは撤退も選択肢

    収拾がつかなければ無理せず --abort して merge に切り替える判断も重要です。

bash
# 現在のコミットをスキップ
git rebase --skip

# rebase を完全に中断(元の状態に戻る)
git rebase --abort

rebase と merge の使い分け

コンフリクトが少なくクリーンな履歴にしたい場合は rebase が向いています。

コンフリクトが大量に発生する場合や、共有ブランチの場合は merge のほうが安全です。

rebase は「まだ push していないローカルのコミット整理」に使い、push 済みのコミットには使わないのが基本方針です。

関連コマンド