GitHub:プルリクの差分が 406 になる・ファイルが欠ける
GitHub の REST API は、プルリクの変更を2つの形で渡します。プルリク(GET /repos/持ち主/リポジトリ名/pulls/番号)をメディアタイプ application/vnd.github.diff で求めたときの差分まるごとと、ファイルごとのパッチが付いた変更ファイルの一覧(GET /repos/持ち主/リポジトリ名/pulls/番号/files)です。どちらもファイルの数に上限があります。以下は、2026年10月25日に api.github.com が、変更ファイルが1,545ある公開のプルリクについて返した答えと、その裏にある GitHub の文書の決まりです。
HTTP/1.1 406 Not Acceptable
{"message":"Sorry, the diff exceeded the maximum number of files (300). Consider using 'List pull requests files' API or locally cloning the repository instead.",
"errors":[{"resource":"PullRequest","field":"diff","code":"too_large"}]}
406「too_large」:差分のファイルが300を超えている
- 差分は1回の答えでまるごと来ます。GitHub は、変更ファイルが300を超えるプルリクの差分を作らず、406 Not Acceptable で、フィールド
diffにコードtoo_largeを付け、ファイルの一覧を案内します(和訳:差分がファイル数の上限(300)を超えました。「List pull requests files」の API を使うか、リポジトリを手元にクローンしてください)。同じプルリクを JSON(application/vnd.github+json)で求めると 200 でした。断られたのは差分だけです。
ファイルの一覧は3,000件で止まる
- 最大3,000件:GitHub の文書は、一覧に入るのは最大3,000ファイル、1ページは既定で30件、
per_pageで100件までとしています。Linkヘッダーのrel="last"が最後のページを示し、その先のページは 200 で空の一覧でした。 - ファイルが欠けているかは、受け取ったファイルの数を、プルリクそのもの(
GET /repos/持ち主/リポジトリ名/pulls/番号)のchanged_filesと比べればわかります。上のプルリクは1545で、100件ずつ16ページですべて来ました。 - 404
Not Found:その番号のプルリクが無いか、トークンからリポジトリが見えません。GitHub は、見られない非公開のリポジトリに 403 でなく 404 を返します(足す権限の見つけ方へ)。文書は、この一覧について 422(検証に通らないか、送りすぎ)・500・503 も挙げています。
直し方
- 406:代わりにファイルの一覧を読むか、ブランチを手元で比べる。
git fetch origin pull/番号/headでプルリクの先頭を取り(GitHub はその ref に置いています)、git diff origin/ベースのブランチ...FETCH_HEADで、GitHub の Files changed と同じくすべてのファイルが見えます。 - 3,000件を超えるとき:残りは API からは来ません。同じ
git diffを使う。 - 画面の上限:Files changed のタブには行・大きさ・ファイルの数の別の上限があり、生成ファイルは既定で隠れます(ファイルの差分が出ない)。
IntelliJ IDEA は変更をファイルの一覧から読み、差分(diff)では頼まない
IntelliJ IDEA に入っている GitHub の機能が、プルリクの変更をどう読むか。ソース(2026年10月31日に確認・IntelliJ IDEA:GHPRChangesServiceImpl.kt・GHPRChangesDataProviderImpl.kt・GithubApiRequests.kt・GithubApiPagesLoader.kt)では:
- プルリクを差分として頼むことはありません。差分のメディアタイプで頼むのは2つのコミットの比較だけなので、上の 406
too_largeは IDE からは出ません。 - プルリク全体の変更は上のファイルの一覧から読みます。
per_pageを付けないので GitHub の既定の1回30件で、GitHub の次のページのリンクが無くなるまでたどります。そのため、一覧が返す 3,000 ファイルまでです。 - コミットごとの変更はコミットそのもの(
GET /repos/OWNER/REPO/commits/SHA)から、一度に50コミットまで読み、これも次のページのリンクをたどります。マージベースは、プルリクのベースとヘッドのコミットの比較(GET /repos/OWNER/REPO/compare/BASE...HEAD)から取ります。
IntelliJ IDEA で GitHub のプルリクを見るなら
Lesstep の Pull Request Inbox for GitHub は、JetBrains IDE(2024.1 以降)のプラグインです。プルリクの変更はファイルの一覧から100件ずつ、GitHub が渡す3,000件まで読むので、差分の300ファイルの上限にはかかりません。ファイルはそれぞれ IDE の差分で開き、GitHub の Files changed と同じく、ターゲットのブランチとのマージベースから先頭のコミットまでを見せます。変更ファイルが3,000を超えるプルリクでは、「ファイル」のタブに先頭の分だけ出していると書きます。残りは git diff で見えます。受信箱・差分・会話は無料、承認・コメント・マージは 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 の行のコメントの 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