How can I check out a GitHub pull request with git?
I'd like to check out a previously created pull request (created via GitHub web interface). I searched and found different places where a refs/pull or refs/pull/pr
But when I add fetch = +refs/pull/*/head:refs/remotes/origin/pr/*
to the git config file and do a git fetch
What I'm doing wrong? Should GitHub create automatically the pull/xyz stuff, or do I have to configure something?
To fetch a remote PR into your local repo,
git fetch origin pull/$ID/head:$BRANCHNAME
where $ID
is the pull request id and $BRANCHNAME
is the name of the new branch that you want to create. Once you have created the branch, then simply
git checkout $BRANCHNAME
For instance, let's imagine you want to checkout pull request #2 from the origin main branch:
git fetch origin pull/2/head:MASTER
See the official GitHub documentation for more.
This will fetch without you having to name a branch:
git pull origin pull/939/head
How do I get a specific pull request on my machine?
I prefer to fetch and checkout without creating a local branch and to be in HEAD detached state. It allows me quickly to check the pull request without polluting my local machine with unnecessary local branches.
git fetch upstream pull/ID/head && git checkout FETCH_HEAD
where ID
is a pull request ID and upstream
where is original pull request has been created (it could be origin
, for example).
I hope it helps.
That gist does describe what happend when you do a git fetch:
Obviously, change the github url to match your project's URL. It ends up looking like this:
[remote "origin"]
fetch = +refs/heads/*:refs/remotes/origin/*
url = [email protected]:joyent/node.git
fetch = +refs/pull/*/head:refs/remotes/origin/pr/*
Now fetch all the pull requests:
$ git fetch origin
From github.com:joyent/node
* [new ref] refs/pull/1000/head -> origin/pr/1000
* [new ref] refs/pull/1002/head -> origin/pr/1002
* [new ref] refs/pull/1004/head -> origin/pr/1004
* [new ref] refs/pull/1009/head -> origin/pr/1009
...
To check out a particular pull request:
$ git checkout pr/999
Branch pr/999 set up to track remote branch pr/999 from origin.
Switched to a new branch 'pr/999'
You have various scripts listed in issues 259 to automate that task.
The git-extras project proposes the command git-pr
(implemented in PR 262)
git-pr
(1) -- Checks out a pull request locally
SYNOPSIS
git-pr <number> [<remote>]
git-pr clean
DESCRIPTION
Creates a local branch based on a GitHub pull request number, and switch to that branch afterwards.
The name of the remote to fetch from. Defaults to
origin
.EXAMPLES
This checks out the pull request
226
fromorigin
:
$ git pr 226
remote: Counting objects: 12, done.
remote: Compressing objects: 100% (9/9), done.
remote: Total 12 (delta 3), reused 9 (delta 3)
Unpacking objects: 100% (12/12), done.
From https://github.com/visionmedia/git-extras
* [new ref] refs/pull/226/head -> pr/226
Switched to branch 'pr/226'
If you are using Github.com, go to "Pull requests", click on the relevant pull request, and then click on the "command line instructions" link: