GitHub: the branch is not deleted after merging
Deleting a pull request's head branch after the merge is a separate step, done by the "Automatically delete head branches" setting, the "Delete branch" button on the pull request, or a tool calling the API, and the branch's rules apply to it. A ruleset that restricts deletions lets only users with bypass permissions delete the branches whose name matches its pattern, and this rule is selected by default; a protected branch cannot be deleted unless its protection allows deletions (GitHub's available rules for rulesets and about protected branches, checked October 26, 2026).
DELETE /repos/OWNER/REPO/git/refs/heads/BRANCH 204 No Content | 409 Conflict | 422 Validation failed
What keeps a branch
- Restrict deletions (rulesets): through the REST API it is the rule type
deletion, "Only allow users with bypass permissions to delete matching refs" (GitHub's REST API endpoints for rules). Because it is selected by default, a ruleset made for other rules on a pattern that matches pull request branches keeps those branches too. - A protected branch: by default you cannot delete a protected branch. With "Allow deletions", anyone with at least write permissions to the repository can delete it. A locked branch ("Lock branch") cannot be deleted either.
- Automatic deletion: anyone with admin permissions can turn "Automatically delete head branches" on or off, and branch protection rules and repository rules can also prevent branches being deleted automatically. For a pull request from a fork, GitHub uses the fork's setting, and the person merging needs write access to the fork; otherwise the branch is not deleted automatically (GitHub's managing the automatic deletion of branches).
- Open pull requests: with write access you can delete branches associated with closed or merged pull requests, but not branches associated with open pull requests; the "Delete branch" button is not shown while there is an open pull request for the branch (GitHub's deleting and restoring branches in a pull request).
- Through the API: "Delete a reference" answers 204 when it deletes the branch, 409 for a conflict, and 422 for "Validation failed, an attempt was made to delete the default branch, or the endpoint has been spammed" (GitHub's REST API endpoints for Git references).
After the head branch is deleted
- Pull requests based on it: when a head branch is deleted after its pull request was merged, GitHub changes the base branch of the open pull requests in the same repository that were based on it to the merged pull request's base branch (GitHub's merging a pull request).
- Restoring it: the head branch of a closed pull request can be restored with "Restore branch" near the bottom of the pull request.
What to do
- Find the rule: anyone with read access to a repository can view its active rulesets; look for one whose pattern matches the branch and that restricts deletions. A branch protection rule for the branch keeps it unless "Allow deletions" is on.
- Delete it later: someone allowed to bypass the ruleset, or with write access when the protection allows deletions, clicks "Delete branch" on the merged pull request. For a fork's branch, it takes write access to the fork.
- The ruleset should not cover these branches: whoever manages the ruleset narrows its pattern, or removes "Restrict deletions" from it.
- Another pull request still uses the branch: merge or close that pull request first.
In IntelliJ IDEA: "has been deleted." while the branch is still there
How the GitHub support built into IntelliJ IDEA deletes a merged pull request's branch, in its source (checked October 31, 2026; IntelliJ IDEA: GHPRFileEditorComponentFactory.kt, GHPRDetailsTimelineViewModel.kt, GHPRDeleteMergedHeadAction.kt, GHPRDetailsServiceImpl.kt, deleteRef.graphql, GithubBundle.properties):
- Its merge sends only the merge. The IDE deletes the branch only when you ask it to. After the merge, the pull request's timeline shows "Pull Request Successfully Merged" with "You can now delete BRANCH.", and the action Delete Branch ("Delete the merged branch on GitHub") is on.
- It offers deletion only while the pull request is merged, GitHub returns
viewerCanDeleteHeadRefas true for your account, and the head branch still has an id. Otherwise the same line reads "BRANCH has been deleted." with Restore…, which only opens the pull request in your browser. So that line also appears for a branch that is still there; look at the branch on GitHub, then use the rules above. - It deletes with GitHub's GraphQL API (
deleteRefon the head branch), on GitHub only: your local branch is left as it is. - When GitHub refuses, nothing appears on screen: the source writes the error to the IDE's log. The pull request is then loaded again, so the line follows the branch's state on GitHub.
GitHub pull requests in IntelliJ IDEA
Pull Request Inbox for GitHub, a plugin by Lesstep for JetBrains IDEs 2024.1 or later, shows a pull request's reviews, checks and conversations next to the diff, and merges it with the methods the target branch allows. Its merge dialog can delete the pull request's branch after the merge (a branch in the same repository, not a fork's). If GitHub refuses, the notice after merging says the branch was not deleted and names the rules that protect branches from deletion; a refusal answered with 422 too, as the plugin then looks whether the branch is still there. The review inbox, diffs and conversations are free; approving, commenting, resolving and merging are Pro (US$1.50 a month, with a 30-day trial).
GitHub is a trademark of GitHub, Inc.; IntelliJ IDEA is a trademark of JetBrains s.r.o. This page is not affiliated with or endorsed by GitHub, Inc. or JetBrains.
More: GitHub merge refused (405, 409) · GitHub review refused (422) · GitHub search 422 "Validation Failed" · "Resource not accessible by personal access token" · 401 "Bad credentials" · "Resource protected by organization SAML enforcement" · "API rate limit exceeded" · GitHub diff 406 "too_large", 3,000 files · GitHub line comment 422 "must be part of the diff" · GitHub branch update refused (422) · GitHub pull request not created (422, 403) · GitHub auto-merge refused · GitHub draft, ready for review or close refused · GitHub conversation not resolved · GitHub checks not shown (check runs 403) · GitHub file contents not read · GitHub compare refused (404, 422) · GitHub comment or reply refused (403 locked, archived) · GitHub merge method not allowed (405) · GitHub branch not found (404, 301) · GitHub Enterprise Server not reached · GitHub review request not shown · GitHub pull request list incomplete · GitHub 404 Not Found, renamed repositories (301, 307) · GitHub line comment outdated or not on the diff · GitHub pull requests not updating, notifications late · GitHub suggested change cannot be applied · GitHub required check stuck at "Expected" · GitHub code owner review required · GitHub merge blocked by unresolved conversations · GitHub merge blocked by unsigned commits · GitHub branch that merges through a merge queue · GitHub merge waiting for an approval of the most recent push · GitHub merge waiting for code scanning results · GitHub merge waiting for code quality results · GitHub merge blocked by a code coverage threshold · GitHub merge blocked by license compliance results · GitHub branch locked or its updates restricted · GitHub merge waiting for a team's approval (Required reviewers) · GitHub merge blocked by secret scanning alerts · GitHub stacked pull request not merging · GitHub push blocked by push rules · GitHub merge blocked by commit metadata rules · GitHub force push blocked · GitHub issue not closed by a merged pull request · GitHub pull request not checked out locally · GitHub pull request has merge conflicts · GitHub changes requested and dismissing a review · GitHub co-author not credited for a commit · GitHub dependency review check failed · GitHub Dependabot not rebasing its pull request · GitHub fork not syncing with upstream · GitHub pull request base branch not changing · GitHub pull request not reverting · GitHub pull request template not showing · GitHub pull request labels or assignees not added · GitHub pull request not closing or reopening · GitHub push blocked by push protection · GitHub pull request comment hidden · GitHub pull request blocked until deployments succeed · GitHub team review request replaced by members · GitHub pull request file no longer marked Viewed · GitHub pull request marked merged without being merged · GitHub Copilot review does not count as an approval · GitHub checks not running on a pull request a workflow created · GitHub Update branch button not shown on a pull request · GitHub checks failing on a Dependabot pull request · GitHub checks failing on a pull request from a fork · GitHub checks skipped by [skip ci] in a commit message · GitHub checks gone after the retention period · GitHub code review limits in a public repository · GitHub pull requests turned off or limited in a repository · GitHub checks run on every pull request in a stack · GitHub pull request showing commits already squash merged · GitHub pull request not showing a file diff · GitHub push to a pull request branch from a fork refused · GitHub check cancelled on a pull request · GitHub Rebase and merge not available · GitHub merge commit message not what you expected · GitHub pull request shows every line changed · GitHub API request timed out · GitHub pull request image or document diff not shown · GitHub review request refused (422) · GitHub pull request from Copilot: checks not running, approval not counted · GitHub push refused: GH006 and GH013 on a protected branch · GitHub "At least 1 approving review is required", approvals that do not count · GitHub pull request plugins for IntelliJ IDEA, compared · 日本語