Lesstep
GitHub・プルリク・マージの API・2026年10月24日に確認

GitHub の「Pull Request is not mergeable」と「Head branch was modified」

PUT /repos/持ち主/リポジトリ名/pulls/番号/merge が失敗したときの答えは、GitHub の REST の説明に書いてあります。405 はマージを行えない、409 は sha を送ったがプルリクの先頭がもうそれと合わない、403 はその操作が許されていない、422 は検証に通らないか、窓口を短時間に叩きすぎた、です。前の 2 つの文は、GitHub の以前の API の説明に載っていました:

HTTP/1.1 405 Method Not Allowed

{"message": "Pull Request is not mergeable", "documentation_url": "…"}

HTTP/1.1 409 Conflict

{"message": "Head branch was modified. Review and try the merge again.", "documentation_url": "…"}

和訳:「プルリクはマージできません」と「元のブランチが変更されました。見直してからもう一度マージしてください」。

405「Pull Request is not mergeable」

文には理由が書いてありません。GitHub の説明と公開の報告から、次の場合があります:

公開の報告には、405 で Base branch was modified. Review and try the merge again.(和訳:対象のブランチが変更されました。見直してからもう一度マージしてください)が返った例もあります。プルリクを読み直してからマージします。

いまどうなっているか

curl -H "Authorization: Bearer your-token" https://api.github.com/repos/OWNER/REPO/pulls/42

mergeable は true・false・null(まだ確かめている途中:少し後にもう一度読む)で、mergeable_state は状態をひと言で表します(たとえば unknown)。状態の意味は GraphQL の説明にあります。mergeable は MERGEABLE・CONFLICTING・UNKNOWN のどれかで、mergeStateStatus は次のどれかです:

409「Head branch was modified. Review and try the merge again.」

レビューした先頭を sha で送ったが、ブランチの先頭が別のコミットになっています。公開の報告では、プルリクを読んでからマージするまでの間に、コミットが push されていました。対象のブランチを取り込むスクリプト自身の手順や、依存関係を更新するボットによってです。古い sha のまま送り直しても、同じように断られます。プルリクを読み直して新しいコミットを見てから、新しい先頭でマージします。

非同期のマージの API

GitHub の説明は、いまは代わりに PUT …/pulls/番号/merge-async を勧めています。上の窓口は、積み重ねたプルリク(stacked)とマージキューに対応していません。こちらは、受け付けると 202 と結果を取りに行くための ID を返し、もうマージ済みかマージキューに入っていればすぐ 200、マージできない(閉じている・下書き)ならすぐ 400、同じプルリクの非同期のマージがもう待っていれば 409 を返します。最初の段階では、ブランチの保護のルールとルールセットは確かめません。

直し方

IntelliJ IDEA ではボタンが押せないまま、断られたマージは何も出ない

IntelliJ IDEA に入っている GitHub の機能がプルリクをどうマージするか。ソース(2026年10月30日に確認・IntelliJ IDEA:GHPRReviewFlowViewModelImpl.kt・GHPRMergeabilityStateBuilder.kt・GHPullRequestMergeStateStatus.kt・GHPRDetailsServiceImpl.kt・GithubApiRequests.kt)では:

IntelliJ IDEA で GitHub のプルリクを見るなら

Lesstep の Pull Request Inbox for GitHub は、JetBrains IDE(2024.1 以降)のプラグインです。マージの前に、プルリクのマージの条件を、マージを止めているものから順に見せます。承認・変更の依頼・チェック・競合・対象のブランチのルールをまだ満たしていないこと・ルールが求める対象のブランチの新しいコミット・下書きか・あなたのアカウントがマージできるか、です。GitHub がまだ確かめている間は、そう言います。マージするのは、画面に出ていた先頭のコミットです。GitHub が断ったときは、そう言います。405 なら今はマージできないと GitHub の文を添えてマージの条件を見るように、409 ならブランチが変わったので読み直すように、と。自動マージを入れることと、ブランチの更新もできます。受信箱・差分・会話は無料、承認・コメント・マージは Pro(月 US$1.50・30日間の無料試用つき)です。画面は日本語です。

GitHub は GitHub, Inc. の商標、IntelliJ IDEA は JetBrains s.r.o. の商標です。このページは GitHub, Inc.・JetBrains のいずれとも提携しておらず、承認も受けていません。

ほかに:GitHub のレビューの断り(422) · GitHub の検索の 422「Validation Failed」 · 401「Bad credentials」 · 「Resource not accessible by personal access token」 · 「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 で依存関係のレビューのチェックが失敗する · 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