GitHub:プルリクがマージ先と衝突している
マージの衝突は、同じファイルの同じ行に別々の変更がされたときや、ある人がファイルを書き換え、別の人が同じファイルを消したときに起きます。Git はどちらを残すかを安全に選べないので、GitHub でプルリクをマージする前に、衝突をすべて解決する必要があります。比べるブランチとマージ先のブランチが衝突しているあいだ、Merge pull request は押せません(GitHub の説明「マージの衝突」・2026年10月27日に確認)。
$ git merge BRANCH-NAME > CONFLICT (content): Merge conflict in styleguide.md > Automatic merge failed; fix conflicts and then commit the result
衝突の2つの型
- 同じ行の食い違い:両方のブランチが同じ行を変えています。ファイルの中では、HEAD(マージ先)の変更が
<<<<<<< HEADの後に、続いて=======、もう一方のブランチの変更、>>>>>>> BRANCH-NAMEの順に並びます。 - 消されたファイル:一方のブランチが、もう一方が書き換えたファイルを消しています。
git statusはマージできていないパスとして、たとえばdeleted by usと出します。
GitHub で解決する
- 衝突のエディター:単純な同じ行の食い違いは GitHub で解決できます。プルリクの下のほうの Resolve conflicts を押し、片方・もう片方・新しい変更のどれかを残して衝突の印を消し、ファイルごとに Mark as resolved、最後に Commit merge を押します(GitHub の説明「GitHub でマージの衝突を解決する」)。
- Resolve conflicts が押せない:消されたファイルなど、それ以外の衝突は、別の Git のクライアントかコマンドラインで解決します。
- マージ先のブランチ全体:GitHub で衝突を解決すると、マージ先のブランチ全体が head のブランチにマージされます。head のブランチが既定のブランチか保護されたブランチなら、新しい head のブランチを作るよう求められることがあり、保護されたブランチなら必ず作ります(Create branch and update my pull request)。
コマンドラインで解決する
- 同じ行:
git statusがファイルをboth modifiedと出します。ファイルごとに直して衝突の印を消し、git add .とgit commitをします。 - 消されたファイル:残すなら
git add FILE、消すならgit rm FILEで、それからコミットします。 - プルリクへ戻す:解決をプルリクのブランチへ push してから、プルリクをマージします(GitHub の説明「コマンドラインでマージの衝突を解決する」)。
直す所
- 単純な同じ行の衝突:プルリクのページの Resolve conflicts で解決し、Merge pull request を押します。
- それ以外:手元のクローンで、マージ先のブランチをプルリクのブランチにマージし、衝突を解決してコミットし、プルリクのブランチへ push します。
- Update branch では直らない:GitHub がブランチを更新するのはマージの衝突が無いときだけで、あると
merge conflict between base and headで断ります(ブランチの更新が断られた理由を参照)。 - スカッシュでマージした後の同じ衝突:スカッシュでマージしたブランチで作業を続けると、後のプルリクにスカッシュ済みのコミットがまた入り、衝突が起きやすくなって同じ衝突を何度も解くことにもなります(スカッシュでマージ済みのコミットが次のプルリクに出る)。
IntelliJ IDEA の「Branch has conflicts that must be resolved」
IntelliJ IDEA に入っている GitHub のプルリクの機能は、プルリクの状態に「Branch has conflicts that must be resolved」という行を、Resolve のリンクと一緒に出します。ソース(2026年10月30日に確認)では、行が出るのは、GraphQL がプルリクの mergeable を CONFLICTING(「The pull request cannot be merged due to merge conflicts」=衝突があってマージできない)と返すときです。UNKNOWN(「The mergeability of the pull request is still being calculated」=まだ計算中)の間と、答えが来る前は、代わりに「Checking branch for conflicts」と出ます(GitHub の説明「MergeableState」・IntelliJ IDEA の GHPRMergeabilityStateBuilder.kt・GHPRResolveConflictsLocallyViewModelImpl.kt・CodeReviewDetailsStatusComponentFactory.kt)。Resolve を押すと、リベースかマージかを聞かれ、マージ先のブランチを fetch し、プルリクのブランチをチェックアウトしてから、マージ先へリベースするか、マージ先をマージします。衝突はそのあと IDE で直し、プルリクが変わるのは push したときです。リベースしたときは、その push は force push になります(ResolveConflictsLocallyViewModel.kt)。Resolve が押せず理由が出るのは、たとえば、リポジトリがマージかリベースの途中のとき(「Merge is already in progress」)と、いまのブランチがプルリクのブランチを追っていて、マージ先の最新のコミットがすでに履歴に入っているとき(「Already resolved locally, push your changes to resolve」=手元では直してあるので push する)です(CollaborationToolsBundle.properties)。マージしたあとも「Checking branch for conflicts」が残るという報告が、まだ開いています(IJPL-162938・2026年10月30日に確認)。
IntelliJ IDEA で GitHub のプルリクを見るなら
Lesstep の Pull Request Inbox for GitHub は、JetBrains IDE(2024.1 以降)のプラグインです。プルリクのレビュー・チェック・会話を差分の隣に出し、対象のブランチが許す方法でマージします。マージの確認は、プルリクがマージ先と衝突していればそう言い、マージを止めるものとして先頭のほうに並べます。GitHub の Resolve conflicts で解決するか、手元でマージ先のブランチをマージして push するよう言い、衝突しているあいだは GitHub が断る「ブランチを更新」を出しません。受信箱・差分・会話は無料、承認・コメント・解決・マージは Pro(月 US$1.50・30日間の無料試用つき)です。画面は日本語です。
GitHub は GitHub, Inc. の商標、IntelliJ IDEA は JetBrains s.r.o. の商標です。このページは GitHub, Inc.・JetBrains のいずれとも提携しておらず、承認も受けていません。
ほかに:GitHub のマージの断り(405・409) · GitHub のレビューの断り(422) · GitHub の検索の 422「Validation Failed」 · 「Resource not accessible by personal access token」 · 401「Bad credentials」 · 「Resource protected by organization SAML enforcement」 · 「API rate limit exceeded」 · GitHub の差分の 406「too_large」・3,000件 · GitHub の行のコメントの 422「must be part of the diff」 · GitHub のブランチの更新の断り(422) · GitHub のプルリクが作れない(422・403) · GitHub の自動マージの断り · GitHub の下書き・レビュー準備完了・閉じるの断り · GitHub の会話の解決の断り · GitHub のチェックが出ない(check runs の 403) · GitHub のファイルの中身が読めない · GitHub の比較の断り(404・422) · GitHub のコメント・返信の断り(ロック・アーカイブの 403) · GitHub のマージの方法の断り(405) · GitHub のブランチが見つからない(404・301) · GitHub Enterprise Server につながらない · GitHub のレビューの依頼が出ない · GitHub のプルリクの一覧が足りない · GitHub の 404・名前を変えたリポジトリ(301・307) · GitHub の行のコメントが outdated・差分に無い · GitHub のプルリクの更新・通知が遅い · GitHub の変更の提案が適用できない · GitHub の必須チェックが Expected のまま · GitHub でコードオーナーのレビューが要る · GitHub で未解決の会話がマージを止める · GitHub で署名の無いコミットがマージを止める · GitHub のマージキューでマージするブランチ · GitHub でマージが最後の push の承認を待っている · GitHub でマージがコードスキャンの結果を待っている · GitHub でマージがコード品質の結果を待っている · GitHub でコードのカバレッジの水準がマージを止める · GitHub でライセンスの適合の結果がマージを止める · GitHub でブランチのロックや更新の制限がマージを止める · GitHub でマージの後にブランチが消えない · GitHub でチームの承認(Required reviewers)がマージを止める · GitHub でシークレットスキャンのアラートがマージを止める · GitHub でスタックしたプルリクがマージできない · GitHub で push の規則が push を止める · GitHub でコミットのメタデータの規則がマージを止める · GitHub で強制 push が止められる · GitHub でプルリクをマージしても issue が閉じない · GitHub のプルリクを手元にチェックアウトできない · GitHub で変更を依頼された・レビューを取り消す · GitHub で共同作者がコミットに数えられない · GitHub で依存関係のレビューのチェックが失敗する · GitHub で Dependabot がプルリクをリベースしない · GitHub でフォークが同期できない · GitHub でプルリクのベースのブランチを変えられない · GitHub でプルリクを取り消せない · GitHub でプルリクのテンプレートが出ない · GitHub でプルリクにラベルや担当者が付かない · GitHub でプルリクを閉じられない・開き直せない · GitHub でプッシュ保護にプッシュを止められた · GitHub でプルリクのコメントが隠された · GitHub でデプロイが成功するまでプルリクをマージできない · GitHub でチームに頼んだレビューがメンバーに置き換わった · GitHub でプルリクのファイルの Viewed が外れた · GitHub でマージしていないプルリクがマージ済みになった · GitHub で Copilot のレビューが承認に数えられない · GitHub でワークフローが作ったプルリクのチェックが動かない · GitHub でプルリクに Update branch のボタンが出ない · GitHub で Dependabot のプルリクのチェックが失敗する · GitHub でフォークからのプルリクのチェックが失敗する · GitHub でコミットメッセージの [skip ci] でチェックが動かない · GitHub で保存期間を過ぎてチェックが消えた · GitHub の公開リポジトリのコードレビューの制限 · GitHub でリポジトリのプルリクがオフ・制限されている · GitHub でスタックのプルリクごとにチェックが走る · GitHub でスカッシュでマージ済みのコミットが次のプルリクに出る · GitHub のプルリクでファイルの差分が出ない · GitHub でフォークのプルリクのブランチに push できない · GitHub のプルリクのチェックが取り消された · GitHub で Rebase and merge が使えない · GitHub のマージのコミットメッセージが思った形にならない · GitHub のプルリクでファイルの全行が変わったと出る · GitHub の API がタイムアウトした · GitHub のプルリクで画像や文書の差分が見た目で出ない · GitHub のレビューの依頼が断られる(422) · GitHub で Copilot が作ったプルリクのチェックが動かない・承認が数えられない · GitHub の push が GH006・GH013 で断られる · GitHub で承認が足りずマージできない・数に入らない承認 · JetBrains の IDE で GitHub のプルリクを扱う · English