Resolve Merge Conflictsの紹介

by
Atsushi Nakatsugawa

Atsushi Nakatsugawa

April 30, 2026

1 min read

Cover image

Introducing Resolve Merge Conflictsの意訳です。

マージしようとしたとき、すべてがグリーンなのに、GitHubからこう言われたことはないでしょうか。「This branch has conflicts that must be resolved.」。そのとき、あなたがやることは以下の手順です。

  • mainをプルする
  • ブランチを切り替える
  • コンフリクトしているファイルを開く
  • もう一人の開発者がこのコードで何をしようとしていたのか思い出そうとする
  • 行をなんとかつなぎ合わせて、壊れないことを祈る
  • プッシュしてCIの結果を待つ

コンフリクトマーカーは、実際には衝突していないコードの周りにあるノイズにすぎません。

それなのに、なぜこんな細かい作業に時間を取られなければならないのでしょうか。

Resolve Merge Conflictsとは

CodeRabbitがPRのコンフリクトを検出すると、Resolve Merge Conflictsが自動で解消します。両方の変更の意図を読み取り、統合すべき正しい結果を判断し、適切なマージコミットとしてブランチにコミットします。CodeRabbit Pro Plusプランにて、GitHubとGitLabの両方で利用可能です。具体的な流れは以下のとおりです。

従来の手動での方法

これまでは、作業を中断してブランチを切り替え、他の開発者の変更と自分の変更を手動で照合していたはずです。その後CIを再実行し、何か見落としがないことを祈る、という流れでした。

コメント1つで完了する新しい方法

コメントを書くだけで、CodeRabbitがコンフリクトを解消し、両方の親を持つマージコミットがブランチに作成されます。

仕組み

この機能を使う方法は2つあります。

PRにコメントする

PRのスレッドで以下のようにコメントするだけです。

ダークテーマのターミナルウィンドウに表示された「@coderabbitai resolve merge conflict」コマンド。

PRウォークスルーのチェックボックス

GitHubでは、CodeRabbitがレビュー中にコンフリクトを検出すると、ウォークスルーコメント内に「Resolve merge conflicts」チェックボックスが表示されます。チェックを入れるだけで実行できます。

どちらの方法でも、解消された変更がブランチに直接コミットされます。

実行時に何が起きるか

コンフリクト解消が実行されると、内部では以下の処理が行われます:

  • 検出: PRレビュー中に、CodeRabbitがサンドボックス内でマージをシミュレーションし、サマリーコメントにコンフリクトを一覧表示します。作業ツリーには一切影響しません。
  • 意図の分析: コンフリクトしている各ファイルについて、エージェントが両方のブランチを読み、単に何が変更されたかだけでなく、それぞれの変更がなぜ行われたかを把握します。
  • 解消: AIエージェントが各コンフリクトを根本から推論します。リポジトリ内で直接作業し、gitの状態を調べ、ファイルを読み、gitコマンドを実行し、コードを編集します。正しい結果のために必要であれば、コンフリクト箇所以外の変更も行えます。
  • 検証: コンフリクトマーカーが残っていないこと、マージインデックスがクリーンであることを確認し、リポジトリのビルドとlintを実行して、解消によって導入されたエラーがないかを検出します。
  • コミット: 結果は2つの親(自分のブランチとベースブランチ)を持つ適切なマージコミットとして記録されるため、git履歴に実際の経緯が正しく反映されます。

特に役立つ場面

GitHub上でプルリクエストのコンフリクトがWebエディタでは解消できないほど複雑だった経験はないでしょうか。Resolve Merge Conflicts機能があれば、「use the command line to resolve conflicts before continuing」というエラーメッセージに作業を止められることはもうありません。

CodeRabbitが自動解消しないケース

以下の2つのケースでは、推測による解消が実害を引き起こす可能性があるため、エージェントは解消を行いません。

  • セキュリティ上重要なコード: 認証ロジック、暗号化、シークレット処理、アクセス制御など。ここでの判断ミスはリスクが大きすぎます。
  • 根本的に互換性のないビジネスロジック: 両方のブランチが互いに矛盾するアーキテクチャ上の判断をしており、人間の判断が必要な場合。

解消を見送る場合、試行全体が中止されます。部分的なコミットや中途半端に解消されたファイルは残りません。対象のファイル名と具体的な理由がコメントで通知されます。見送りの基準は意図的に高く設定されているため、大多数のコンフリクトは自動で解消されます。

試してみましょう

Resolve Merge Conflictsは、Pro Plusプランでオープンベータとして提供中で、GitHubとGitLabで利用可能です。

次にコンフリクトが発生した際には、ブランチを切り替える必要はありません。PRにコメントを書くだけで、マージコンフリクトが解消されるのを確認してください。

CodeRabbitを始める