Checking out pull requests locally

When someone sends you a pull request from a fork or branch of your repository, you can merge it locally to resolve a merge conflict or to test and verify the changes before merging on GitHub.

Anyone with write access to a repository can pull a remote pull request down locally.

Note: Pull request authors can give upstream repository maintainers, or those with push access to the upstream repository, permission to make commits to their pull request's compare branch in a user-owned fork. For more information, see "Allowing changes to a pull request branch created from a fork."

Tip: You can also check out a pull request locally using the GitHub CLI. For more information, see "gh pr checkout" in the GitHub CLI documentation.

Modifying an active pull request locally

  1. Under your repository name, click Pull requests.

    Issues and pull requests tab selection

  2. In the list of pull requests, click the pull request you'd like to modify.

  3. To choose where you'd like to open the pull request, select the Open with drop-down and click one of the tabs. Link to access command line pull request instructions

Modifying an inactive pull request locally

If a pull request's author is unresponsive to requests or has deleted their fork, the pull request can still be merged. However, if you want to make changes to a pull request and the author is not responding, you'll need to perform some additional steps to update the pull request.

Once a pull request is opened, GitHub stores all of the changes remotely. In other words, commits in a pull request are available in a repository even before the pull request is merged. You can fetch an open pull request and recreate it as your own.

Anyone can work with a previously opened pull request to continue working on it, test it out, or even open a new pull request with additional changes. However, only collaborators with push access can merge pull requests.

  1. Under your repository name, click Issues or Pull requests. Issues and pull requests tab selection
  2. In the "Pull Requests" list, click the pull request you'd like to merge.
  3. Find the ID number of the inactive pull request. This is the sequence of digits right after the pull request's title. Pull Requests ID number
  4. Open TerminalTerminalGit Bash.
  5. Fetch the reference to the pull request based on its ID number, creating a new branch in the process.
    $ git fetch origin pull/ID/head:BRANCHNAME
  6. Switch to the new branch that's based on this pull request:
    [main] $ git checkout BRANCHNAME
    > Switched to a new branch 'BRANCHNAME'
  7. At this point, you can do anything you want with this branch. You can run some local tests, or merge other branches into the branch.
  8. When you're ready, you can push the new branch up:
    [pull-inactive-pull-request] $ git push origin BRANCHNAME
    > Counting objects: 32, done.
    > Delta compression using up to 8 threads.
    > Compressing objects: 100% (26/26), done.
    > Writing objects: 100% (29/29), 74.94 KiB | 0 bytes/s, done.
    > Total 29 (delta 8), reused 0 (delta 0)
    > To https://github.com/username/repository.git
    >  * [new branch]      BRANCHNAME -> BRANCHNAME
  9. Create a new pull request with your new branch.

Error: Failed to push some refs

The remote refs/pull/ namespace is read-only. If you try to push any commits there, you'll see this error:

! [remote rejected] HEAD -> refs/pull/1/head (deny updating a hidden ref)
error: failed to push some refs to '[email protected]:USERNAME/REPOSITORY.git'

Tip: When you remove or rename a remote reference, your local refs/pull/origin/ namespace will not be affected by calls to git-remote.

Did this doc help you?Privacy policy

Help us make these docs great!

All GitHub docs are open source. See something that's wrong or unclear? Submit a pull request.

Make a contribution

Or, learn how to contribute.