GitHub:プルリクが作れなかった理由
プルリクは POST /repos/持ち主/リポジトリ名/pulls で作ります。title、head(変更のあるブランチ。同じネットワークのフォークからなら ユーザー:ブランチ)、base(このリポジトリにあるブランチ)に、必要なら body・draft・maintainer_can_modify を付けます。GitHub の文書が挙げる答えは、作れたときの 201、403、検証に通らないか送りすぎたときの 422 です。422 の文は文書にありません。以下は公開の報告から引いた文と、その裏にある GitHub の文書の決まりです(2026年10月25日に確認)。
HTTP/1.1 422 Unprocessable Entity
{"message": "Validation Failed", "errors": [{"resource": "PullRequest", "code": "custom", "message": "No commits between main and my-branch"}], "documentation_url": "https://docs.github.com/rest/pulls/pulls#create-a-pull-request", "status": "422"}
422:GitHub の文と理由
A pull request already exists for 持ち主:ブランチ.(codeはcustom):この head のブランチからのプルリクが、もう開いています。No commits between base と head(codeはcustom):head のブランチに、base のブランチに無いコミットがありません。新しいコミットをまだ push していないか、もうマージ済みか、headとbaseのブランチの指定が違います。{"resource":"PullRequest","field":"head","code":"invalid"}:GitHub がheadを見つけられません。ブランチがまだ GitHub に無いか、名前の綴りが違うか、フォークのブランチをユーザー:なしで送っています。GitHub の文書では、同じ組織が持つ2つのリポジトリの間のプルリクにはhead_repoも要ります。{"resource":"PullRequest","field":"base","code":"invalid"}:baseがこのリポジトリのブランチではありません。GitHub の文書は、base はこのリポジトリにあるブランチで、別のリポジトリのブランチへのマージは頼めないと書いています。Draft pull requests are not supported in this repository.:GitHub の文書では、下書きが使えるのは、GitHub Free・GitHub Free for organizations・GitHub Pro・旧来のリポジトリ単位のプランの公開リポジトリと、GitHub Team・GitHub Enterprise Cloud の公開・非公開のリポジトリです。GitHub Free や GitHub Pro の非公開リポジトリでの下書きは断られます。
403・404
- 403
GitHub Actions is not permitted to create or approve pull requests.:トークンがワークフローのGITHUB_TOKENで、リポジトリが Actions にプルリクの作成と承認を許していません(同じ設定で承認も断られます。GitHub がレビューを断った理由へ)。 - 403
Resource not accessible by personal access token(またはby integration):GitHub の権限の一覧では、この入口は Fine-grained のトークンの Pull requests の書き込みです(足す権限へ)。 - だれが作れるか:GitHub の文書は、公開リポジトリでプルリクを開くには head のブランチへの書き込みの権限が要り、組織が持つリポジトリではその組織のメンバーでなければならないと書いています。リポジトリは、プルリクをオフにすることも、作成を共同作業者だけにすることも、書き込みのアクセスが無い人に制限を掛けることもできます(プルリクのオフと制限)。
- 速すぎる:GitHub の文書は、この入口で速く作りすぎると二次のレート制限にかかり、403 か 429 になることがあると書いています(「API rate limit exceeded」へ)。
- 404:リポジトリが、このトークンからは見えません。トークンで見えない非公開のリポジトリにも、GitHub はこう答えます。
直し方
- もうある:
GET /repos/持ち主/リポジトリ名/pulls?head=持ち主:ブランチ&state=openで見つけます。ブランチに push すれば、そのプルリクが更新されます。 - コミットが無い:先に新しいコミットを push するか、
baseがマージしたいブランチかを確かめます。 - head の
invalid:ブランチを push します(git push -u origin ブランチ)。フォークからならユーザー:ブランチで送り、両方のリポジトリが同じ組織のものならhead_repoも付けます。 - base の
invalid:このリポジトリにあるブランチの名前にします。 - 下書きが使えない:
draftなしで、レビューできる状態で作ります。 - GitHub Actions:リポジトリの Settings → Actions → General → Workflow permissions で、GitHub Actions にプルリクの作成と承認を許します(組織では、先に組織の持ち主が許す必要があることがあります)。または別のトークンを使います。
IntelliJ IDEA では「No changes between」と「Pull request already exists」
IntelliJ IDEA に入っている GitHub の機能がプルリクをどう作るか。ソース(2026年10月30日に確認・IntelliJ IDEA:GHPRCreateViewModel.kt・GHPRCreateComponentFactory.kt・GHPRCreationServiceImpl.kt・createPullRequest.graphql・GHAPIExceptionUtil.kt)では:
- 何か送る前に2つのブランチを確かめ(「Checking pull request branches」)、通るまで Create Pull Request は押せません。「No changes between 'BASE' and 'HEAD'」(変更が無い)が出るのは、手元のブランチの追跡先が作り先のブランチそのもののとき(
origin/mainから追跡つきで作ったブランチがそうです。コミットがあっても出ます)か、手元のリポジトリでBASE..HEADにコミットが無いとき(作り先は最後に fetch した時点のもの)です。前者は、ブランチを自分の名前で push し直します(git push -u origin BRANCH)。 - 「Pull request already exists」(もうある)と、開くための View:元のブランチが GitHub にあるとき(リモートのブランチか、それを追跡する手元のブランチ)、その作り先と元で開いているプルリクを GitHub に聞きます(
GET /repos/OWNER/REPO/pulls?state=open&base=BASE&head=OWNER:BRANCH)。何も追跡していない手元のブランチは聞きません。 - 手元のブランチは先に push します(GitHub のコミットと違うとき・「Pushing a pull request branch」)。push 先が無ければ「Remote branch name:」(リモートのブランチ名)を聞きます。なので GitHub が受け取る元は既にあり、
invalidにはなりません。push に失敗すると GitHub には聞かず、理由は Details に出ます。 - プルリクは GitHub の GraphQL の API で作ります(
createPullRequestの mutation)。上の REST の API ではありません。作り先と元はブランチ名で、別のリポジトリの元にはOWNER:を前に付けます。題が空ならブランチ名になります。Create Draft Pull Request は、リポジトリで下書きが使えるかを確かめずに並んでいます。 - GitHub が断ると「Failed to create a pull request」(プルリクを作れなかった)と出て、Details に GraphQL が返したエラーの GitHub の文が出ます。必要なスコープの無いトークンは、代わりに「User authorization failed」です。
- レビュアー・担当者・ラベルは作った後に足します(「Updating pull request fields」)。ここで失敗しても、プルリクはもう GitHub にあります。出るのは同じ「Failed to create a pull request」なので、もう一度 Create を押す前に探してください。
IntelliJ IDEA で GitHub のプルリクを見るなら
Lesstep の Pull Request Inbox for GitHub は、JetBrains IDE(2024.1 以降)のプラグインです。チェックアウトしているブランチからプルリクを作り、マージ先は打つそばから GitHub にあるリポジトリのブランチを出します。その中に無い名前や同じブランチは、送る前に断ります。ブランチがまだ GitHub に無いときは、GitHub に invalid と言われる head を送る代わりに、そう言って IDE の push のダイアログを開きます。そのブランチのプルリクがもう開いているときは GitHub の文を添えてそう言い、ほかの断りは 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 の自動マージの断り · 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