GitHub:最後の push に、ほかの人の承認が要る
プルリクのレビューを必須にしたブランチでは、管理者がさらに「最後の reviewable な push の承認」(Require approval of the most recent reviewable push)を求められます。ブランチの保護でも、ルールセットのプルリクの規則でも設定できます。そうすると、最後の push は、push した人以外が承認する必要があります。つまり、どの変更にも、ほかの権限のあるレビュアーの承認が少なくとも1つ付いているということです(GitHub の説明「保護されたブランチについて」と「ルールセットで使える規則」)。その push より前の承認はプルリクに残るので、承認済みに見えても止まることがあります(2026年10月26日に確認)。
GET /repos/OWNER/REPO/rules/branches/BRANCH [{ "type": "pull_request", "parameters": { "require_last_push_approval": true, … } }]
GET /repos/OWNER/REPO/branches/BRANCH/protection { "required_pull_request_reviews": { "require_last_push_approval": true, … } }
GET /repos/OWNER/REPO/pulls/N/reviews [{ "state": "APPROVED", "commit_id": SHA, … }]
ルールが求めること
- push した人以外:承認は、最後の reviewable な push の後に、その push をした人以外から必要です。GitHub の例は「最後のレビュアー」で、最新の変更がほかのレビューの指摘を取り込み、まだレビューされていない内容を足していないかを確かめます。
- 前の承認は残る:この設定では「古い」レビューは取り消されず、最新の変更をした人以外が承認している限り、プルリクは承認された状態のままです。すでにレビューした人も、最後の push の後にもう一度承認すれば、この条件を満たせます。
- 設定の場所:ブランチの保護では
required_pull_request_reviewsのrequire_last_push_approval(「最後の push を、push した人以外が承認する必要があるか」・既定は false)、ルールセットでは規則pull_requestのパラメータrequire_last_push_approvalです。GraphQL ではrequireLastPushApprovalです。「Get rules for a branch」は、ブランチに当てはまる有効な規則を、どの階層で設定されたものでも全部返します。評価だけのルールセットや無効のルールセットの規則は返しません(GitHub の説明「ルールの REST API」と「保護されたブランチの REST API」)。
古い承認を取り消す設定との違い
- Dismiss stale pull request approvals:GitHub は、承認された時点の差分を記録します。差分が変わると(新しい変更が push された・だれかが Update branch を押した・関係するプルリクが対象のブランチにマージされた)、承認のレビューは古いものとして取り消され、だれかがもう一度承認するまでマージできません。
- 最後の push の承認:何も取り消されません。GitHub は、多くのレビューが要る複雑なプルリク向けの折衷案だと説明し、承認済みのプルリクに承認されていない内容を足される(「乗っ取られる」)のが心配なら、古いレビューを取り消すほうが安全だと書いています。
- どちらの設定でも:マージコミットを自分で作って保護されたブランチへ push すると、GitHub がそのプルリクに作るマージと中身が完全に同じでない限り失敗します。また、レビューの後にマージベース(トピックブランチとベースブランチの最後の共通の祖先)が新しい変更を持ち込むと、承認のレビューは古いものとして取り消され、もう一度承認されるまでマージできません。
だれが承認できるか
- 作者は承認できない:プルリクの作者は自分のプルリクを承認できず、GitHub Copilot の承認はマージの条件の数に入りません(GitHub の説明「必須のレビューがあるプルリクを承認する」)。ただし公開プレビューの Copilot の承認は、オンにすると数えられます(Copilot のレビュー)。このルールのもとでは、最後に push した人の承認も条件を満たしません。
- 変更の依頼:プルリクを必須にする規則があるとき、admin・owner・write の権限を持つ人が変更を依頼するレビューを出すと、同じ人が承認するまでマージできません。管理者か書き込み権限を持つ人はレビューを取り消せます。取り消すには理由のコメントが要り、取り消したレビューはレビューのコメントになります(GitHub の説明「プルリクのレビューを取り消す」)。
直す所
- いま承認してもらう:最後に push した人以外が、今のプルリクを承認します。push の前に承認した人なら、もう一度承認するだけです。
- どの承認が先頭のコミットにあるか見る:「List reviews for a pull request」の各レビューには、それが付いたコミットの
commit_idがあります。API でレビューを作るときに指定しなければ、プルリクの最新のコミットになります(GitHub の説明「プルリクのレビューの REST API」)。古いコミットへの承認は、先頭が動く前に出たものです。 - push してから頼む:後の push の前に出た承認は、このルールを満たさなくなります。マージしたい形までブランチを整えてから承認を頼みます。
- ほかのレビューの規則も止めることがある:承認の数が足りない、コードオーナーのレビュー(コードオーナーのレビュー)、未解決の会話(マージが会話の解決を待っている)です。
IntelliJ IDEA は承認を push と結び付けない
IntelliJ IDEA に入っている GitHub の機能が、新しい push の後の承認をどう扱うか。ソース(2026年10月31日に確認・IntelliJ IDEA:pullRequestReview.graphql・GHReviewersUtils.kt・GHPRReviewFlowViewModelImpl.kt・GraphQL のファイル・GithubApiRequests.kt)では:
- ルールは読まない:78本の GraphQL のファイルのどれも
requireLastPushApprovalを頼まず、REST で送る物の一覧にもありません。 - レビューのコミットは読まない:レビューごとに作者・本文・状態・日時を頼みますが、どのコミットに対するレビューかは頼みません。レビュアーごとに、日時の一番新しい承認か変更の依頼を取るので、最後の push より前の承認も、GitHub が取り消していなければ IDE では承認のままです。承認の数え方は マージがチームの承認を待っている の節にあります。
- 頼み直す:レビューを頼み直すコードは、もうレビューした人(作成者を除く)をレビュー依頼に戻します(レビュー依頼の送り方)。
IntelliJ IDEA で GitHub のプルリクを見るなら
Lesstep の Pull Request Inbox for GitHub は、JetBrains IDE(2024.1 以降)のプラグインです。プルリクのレビュー・チェック・会話を差分の隣に出し、対象のブランチが許す方法でマージします。GitHub がプルリクを blocked と言うときは、マージの確認に読める物を名指しします(報告の無い必須チェック・まだ要るレビュー・ルールが止めている未解決の会話と署名の無いコミット)。レビュアーの一覧では、前のコミットに対する承認にそう印を付けます。承認のあるプルリクが止まっていて、ブランチのルールセットか保護が最後の push の承認を求めているなら、マージの確認にそう出し、いまの先頭のコミットに承認があるかも出します。ルールが読めず、承認がどれも前のコミットに対するものなら、それがマージを止めているかもしれないと出します。受信箱・差分・会話は無料、承認・コメント・解決・マージは 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 でマージがコードスキャンの結果を待っている · 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