GitHub:マージの後にブランチが消えない
マージの後にプルリクの元のブランチを消すのは別の手順で、「Automatically delete head branches」の設定、プルリクの「Delete branch」のボタン、API を呼ぶ道具のどれかが行い、そのブランチのルールが効きます。削除を制限するルールセットは、名前がパターンに合うブランチを消せる人を迂回の権限がある人だけにし、この規則は既定で入っています。保護されたブランチは、保護が削除を許していなければ消せません(GitHub の説明「ルールセットで使える規則」と「保護されたブランチについて」・2026年10月26日に確認)。
DELETE /repos/OWNER/REPO/git/refs/heads/BRANCH 204 No Content | 409 Conflict | 422 Validation failed
ブランチを残すもの
- Restrict deletions(ルールセット):REST API では規則の type
deletionで、「Only allow users with bypass permissions to delete matching refs」(合う参照の削除を迂回の権限がある人だけに許す)です(GitHub の説明「ルールの REST API」)。既定で入るので、ほかの規則のために作ったルールセットでも、パターンがプルリクのブランチに合えば、そのブランチも残ります。 - 保護されたブランチ:既定では、保護されたブランチは消せません。「Allow deletions」を入れると、リポジトリに書き込みの権限以上がある人なら誰でも消せます。ロックしたブランチ(「Lock branch」)も消せません。
- 自動の削除:「Automatically delete head branches」は管理者の権限がある人が入れたり切ったりでき、ブランチの保護のルールとリポジトリのルールも、ブランチが自動で消えるのを止めることがあります。フォークからのプルリクでは、GitHub はフォークの側の設定を使い、マージする人にフォークへの書き込みの権限が要ります。どちらかが欠ければ、ブランチは自動では消えません(GitHub の説明「ブランチの自動の削除を管理する」)。
- 開いたプルリク:書き込みの権限があれば、閉じたかマージしたプルリクのブランチは消せますが、開いたプルリクのブランチは消せません。そのブランチに開いたプルリクがある間は「Delete branch」のボタンが出ません(GitHub の説明「プルリクのブランチを消す・戻す」)。
- API で消すとき:「Delete a reference」は、消せたら 204、衝突なら 409、「Validation failed, an attempt was made to delete the default branch, or the endpoint has been spammed」(検証に失敗した・既定のブランチを消そうとした・呼び出しが多すぎる)なら 422 を返します(GitHub の説明「Git の参照の REST API」)。
元のブランチを消した後
- そのブランチを元にしたプルリク:プルリクをマージした後に元のブランチを消すと、GitHub は、同じリポジトリでそのブランチを元にしていた開いたプルリクの元を、マージしたプルリクの元のブランチに変えます(GitHub の説明「プルリクをマージする」)。
- 戻す:閉じたプルリクの元のブランチは、プルリクの下のほうの「Restore branch」で戻せます。
直す所
- 規則を探す:リポジトリを読める人なら誰でも、有効なルールセットを見られます。パターンがブランチに合い、削除を制限しているものを探します。そのブランチにブランチの保護のルールがあれば、「Allow deletions」が入っていない限りブランチは残ります。
- 後で消す:ルールセットを迂回できる人か、保護が削除を許していれば書き込みの権限がある人が、マージしたプルリクの「Delete branch」を押します。フォークのブランチなら、フォークへの書き込みの権限が要ります。
- ルールセットがこうしたブランチまで覆うべきでない:ルールセットを管理する人がパターンを狭めるか、そのルールセットから「Restrict deletions」を外します。
- 別のプルリクがまだそのブランチを使っている:先にそのプルリクをマージするか閉じます。
IntelliJ IDEA では、ブランチが残っていても「has been deleted.」と出る
IntelliJ IDEA に入っている GitHub の機能が、マージ済みのプルリクのブランチをどう消すか。ソース(2026年10月31日に確認・IntelliJ IDEA:GHPRFileEditorComponentFactory.kt・GHPRDetailsTimelineViewModel.kt・GHPRDeleteMergedHeadAction.kt・GHPRDetailsServiceImpl.kt・deleteRef.graphql・GithubBundle.properties)では:
- IDE のマージはマージだけを送ります。ブランチを消すのは、頼んだときだけです。マージの後、プルリクのタイムラインに「Pull Request Successfully Merged」と「You can now delete ブランチ名.」(ブランチを消せます)が出て、Delete Branch(「Delete the merged branch on GitHub」)の操作が押せます。
- 消す案内が出るのは、プルリクがマージ済みで、GitHub があなたのアカウントに
viewerCanDeleteHeadRefを真と返し、元のブランチにまだ id があるときだけです。それ以外は同じ行が「ブランチ名 has been deleted.」(消された)と Restore… になり、Restore… はブラウザでプルリクを開くだけです。つまりこの行は、ブランチがまだ残っていても出ます。GitHub でブランチを見てから、上の決まりを当たってください。 - 消すのは GitHub の GraphQL の API(元のブランチへの
deleteRef)で、GitHub の上だけです。手元のブランチはそのまま残ります。 - GitHub が断ると、画面には何も出ません。ソースはエラーを IDE のログに書くだけです。その後プルリクを読み直すので、行は GitHub のブランチの今の状態に合わせて変わります。
IntelliJ IDEA で GitHub のプルリクを見るなら
Lesstep の Pull Request Inbox for GitHub は、JetBrains IDE(2024.1 以降)のプラグインです。プルリクのレビュー・チェック・会話を差分の隣に出し、対象のブランチが許す方法でマージします。マージのダイアログで、マージの後にプルリクのブランチを消せます(同じリポジトリのブランチだけで、フォークのものは消しません)。GitHub が断ると、マージの後の知らせでブランチを消していないと言い、削除からブランチを守るルールを挙げます。422 で断られたときも、ブランチがまだあるかを見て、同じように知らせます。受信箱・差分・会話は無料、承認・コメント・解決・マージは 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