GitHub:ブランチのロックや更新の制限がマージを止める
ブランチをほとんどの人が更新できないようにする設定が2つあります。ブランチのルールセットは更新を制限できます(「Restrict updates」):名前がパターンに合うブランチに push できるのは、迂回の権限がある人だけです。ブランチの保護のルールはブランチをロックできます(「Lock branch」):ブランチは読み取り専用になり、コミットを足せず、消すこともできません(GitHub の説明「ルールセットで使える規則」と「保護されたブランチについて」)。プルリクのマージも対象のブランチを更新するので、こうしたブランチへのプルリクをマージできるのは、ルールが通す人だけです(2026年10月26日に確認)。
GET /repos/OWNER/REPO/rules/branches/BRANCH
[{ "type": "update", "parameters": { "update_allows_fetch_and_merge": false } }]
GET /repos/OWNER/REPO/branches/BRANCH/protection
{ "lock_branch": { "enabled": true }, "allow_fork_syncing": { "enabled": false }, ... }
設定
- Restrict updates(ルールセット):REST API では規則の type
updateで、「Only allow users with bypass permission to update matching refs」(合う参照の更新を迂回の権限がある人だけに許す)です。必須の項目update_allows_fetch_and_mergeは、ブランチが上流のリポジトリから変更を取り込めるかです(GitHub の説明「ルールの REST API」)。リポジトリを読める人なら誰でも、そのリポジトリの有効なルールセットを見られます(GitHub の説明「ルールセットについて」)。 - Lock branch(ブランチの保護):ブランチは読み取り専用です。フォークしたリポジトリは、既定では上流のリポジトリからの同期ができません。「Allow fork syncing」を入れると、フォークのブランチへのほかの変更は止めたまま、上流のリポジトリから変更を取り込めます。REST API では
lock_branch(「If this is true, users will not be able to push to the branch」=true ならブランチに push できない)とallow_fork_syncingです(GitHub の説明「保護されたブランチの REST API」)。 - Restrict who can push(ブランチの保護):もっと狭い設定です。許された人・チーム・アプリだけがブランチに push できます。リポジトリの管理者の権限がある人とアプリは、いつでも push できます。GitHub Free の組織の公開リポジトリと、GitHub Team か GitHub Enterprise Cloud の組織の全部のリポジトリで使えます。
- 両方あるとき:ルールセットとブランチの保護のルールは並んで働き、当てはまる規則は全部効きます。同じ規則が違う形で決まっていれば、いちばん厳しい形が効きます。
それでもブランチを更新できる人
- ルールセットの迂回:ルールセットは、決めた人に迂回を許せます。リポジトリの管理者のような役割の人、決めたチーム、GitHub Apps です。
bypass_modeがpull_requestなら、その人が迂回できるのはプルリクの上だけです(ブランチのルールセットだけ)。exemptなら、その人には規則が走らず、迂回の監査の記録も残りません。リポジトリのルールセットの API は、自分が迂回できるかをcurrent_user_can_bypassで返します(always・pull_requests_only・never・exempt)。 - 管理者とブランチの保護:既定では、ブランチの保護のルールの制限は、リポジトリの管理者の権限がある人と、「bypass branch protections」の権限を持つカスタムの役割には効きません。「Do not allow bypassing the above settings」を入れると、その人たちにも効きます。
直す所
- どの設定かを見る:リポジトリの有効なルールセットに、そのブランチの更新を制限する物があるかを見ます。ロックは、リポジトリのブランチの設定にある、そのブランチの保護のルールです。
- ルールを迂回できる人に頼む:ルールセットが迂回を許す人・チーム・アプリがプルリクをマージします。迂回のモードが
pull_requestの人は、プルリクの上でだけ迂回できます。ロックなら、「Do not allow bypassing the above settings」が入っていなければ管理者がマージできます。 - ブランチをまた変えられるようにする:ルールを管理する人が「Lock branch」を切るか、ルールセットから更新の規則を外します。
- どの規則が断ったか:「List repository rule suites」は規則の評価を一覧にし、それぞれの結果(
pass・fail・bypass)を出します。1つの参照に絞れます(GitHub の説明「ルールの評価の REST API」)。
IntelliJ IDEA の「You are not authorized to merge request into this branch」
IntelliJ IDEA に入っている GitHub のプルリクの機能は、プルリクの状態に「You are not authorized to merge request into this branch」という行を出します。ソース(2026年10月30日に確認)では、行が出るのは、マージ先のブランチにブランチ保護のルールがあり、GraphQL がそのブランチへ自分は push できないと言うとき(refUpdateRule.viewerCanPush が false)で、下書きのプルリクには出ません(GHPRMergeabilityStateBuilder.kt・CodeReviewDetailsStatusComponentFactory.kt・CollaborationToolsBundle.properties)。ブランチがロックされているときと、Restrict who can push to matching branches で、許された人・チーム・アプリに自分が入っていないときがこれに当たります。push の権限を渡せるのは書き込みの権限がある人だけで、リポジトリの admin の権限がある人はいつでも push できます(GitHub の説明「About protected branches」)。refUpdateRule は admin でない人にも見えるブランチ保護のルールで、ルールセットのルール(Restrict updates など)は別の一覧 rules にあり、この行はそちらを読みません(GitHub の説明「GraphQL の Git」)。
IntelliJ IDEA で GitHub のプルリクを見るなら
Lesstep の Pull Request Inbox for GitHub は、JetBrains IDE(2024.1 以降)のプラグインです。プルリクのレビュー・チェック・会話を差分の隣に出し、対象のブランチが許す方法でマージします。GitHub がプルリクを blocked と言うときは、マージの確認に読める物を名指しします(報告の無い必須チェック・まだ要るレビュー・ルールが止めている未解決の会話と署名の無いコミット・最後の push のルール・ルールセットが求めるコードスキャンのツールとコード品質の重大度とコードのカバレッジの水準とライセンスの適合の結果)。ブランチのルールが更新を制限しているか、ロックしているなら、止まっているプルリクのマージの確認にそう出し、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 でマージが最後の push の承認を待っている · 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