GitHub: a pull request is not checked out locally
After a pull request is opened, GitHub stores all of its changes remotely: its commits are available in the repository even before it is merged, so you can fetch the pull request by its number even when its author has deleted their fork. The branch itself may be gone: in someone else's fork, deleted by hand once the pull request was merged or closed, or deleted automatically after the merge (GitHub's checking out pull requests locally, checked October 26, 2026).
git fetch origin pull/ID/head:BRANCH_NAME git switch BRANCH_NAME // refs/pull/ is read-only: ! [remote rejected] HEAD -> refs/pull/1/head (deny updating a hidden ref)
Where the branch went
- In a fork: a pull request from a fork has its compare branch in the fork, not in the repository you cloned. If the author is unresponsive or has deleted their fork, the changes can still be merged through a new pull request.
- Deleted after the merge: anyone with write access can delete a branch associated with a merged or closed pull request when no other open pull request references it; a branch associated with an open pull request cannot be deleted. A repository can also delete head branches automatically after pull requests are merged (GitHub's deleting and restoring branches in a pull request and managing the automatic deletion of branches).
- Forks and automatic deletion: for a pull request opened from a fork, GitHub uses the fork's "Automatically delete head branches" setting, and deletes the branch only when the person merging has write access to the fork (see branch not deleted after merging).
Fetching the pull request instead
- By number: fetch the reference to the pull request based on its ID number into a new local branch,
git fetch origin pull/ID/head:BRANCH_NAME, then switch to it. You can run tests or merge other branches into it, push it as a new branch, and create a new pull request with it. - With GitHub CLI:
gh pr checkout PULL-REQUESTtakes the pull request's number, URL or head branch. - Read-only: the remote
refs/pull/namespace is read-only. Pushing commits there fails withdeny updating a hidden ref; push a branch of your own instead. - Remotes: removing or renaming a remote does not affect your local
refs/pull/origin/namespace.
What to do
- Restore the branch: on a closed pull request, Restore branch near the bottom of the page brings the deleted head branch back.
- Committing to a fork's branch: the author of a pull request from a fork in a personal account can select "Allow edits from maintainers", which lets anyone with push access to the upstream repository commit to the compare branch. If the fork contains GitHub Actions workflows the option is "Allow edits and access to secrets by maintainers", and it also lets maintainers edit the fork's workflows (GitHub's allowing changes to a pull request branch created from a fork; see pushing to a pull request branch in a fork).
- Otherwise: fetch the pull request by its number, push your own branch, and open a new pull request with the changes.
In IntelliJ IDEA: "Fetch failed", or nothing on screen
How the GitHub support built into IntelliJ IDEA checks out a pull request, in its source (checked October 30, 2026; IntelliJ IDEA: GHPRBranchesViewModel.kt, GitRemoteBranchesUtil.kt, hostedGitRepositoryRemote.kt, GHPRReviewBranchStateSharedViewModel.kt, GHPROnCurrentBranchService.kt):
- Checkout Branch ("Fetch and checkout the pull request branch") fetches the head branch by its name from the repository it is in, not
pull/ID/head. A branch that was deleted after the merge cannot be fetched that way: the IDE reads "Fetch failed" with Git's reason, and nothing is checked out. Fetch the pull request by its number as above. - From a fork, it fetches from the fork itself: it uses a remote that already points to the fork, or adds one named after the fork's owner (HTTPS when
originuses HTTP or HTTPS, otherwise SSH), and checks the branch out asfork/OWNER/BRANCH, unless a local branch already tracks it. If it can neither find nor add such a remote, it reads "Branch checkout failed" and "Cannot resolve git remote for merge request source repository". - When GitHub returns no head repository for the pull request (the field can be empty in GitHub's GraphQL API), it stops before fetching; the source only writes a warning to the IDE's log, and nothing appears on screen. Fetch the pull request by its number as above.
- Once it is checked out, the current branch reads "#ID on BRANCH". When the pull request's last commit is not in your branch's history, as after its author pushed again, it reads "Pull request #ID exists for current branch BRANCH, but local branch is out of sync with remote", and an Update action fetches and checks it out again.
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 Checkout fetches the pull request's branch and checks it out; for a pull request from a fork, or one whose fork was deleted, it fetches refs/pull/NUMBER/head into a local branch named after the pull request, such as pr/42-fix-login, with no upstream, so a push offers a new branch of that name rather than a branch GitHub does not have. It does the same, and says so, when the pull request's branch was deleted on GitHub and there is no local branch of that name either. 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 branch not deleted after merging · 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 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 · 日本語