Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

GitHub clone from pull request?

People also ask

Can I clone a pull request GitHub?

The changes you want can be got from the source of the pull request. To do this, clone the user's repository ( git://github.com/berstend/frappe.git ), and then check out the branch he created the pull request from ( feature/mongoose-support ).

Is cloning same as pull request?

git clone means you are making a copy of the repository in your system. git fork means you are copying the repository to your Github account. git pull means you are fetching the last modified repository. git push means you are returning the repository after modifying it.


The easiest way to do that is like this:

git fetch origin pull/2/head
git checkout -b pullrequest FETCH_HEAD

You will now be on a new branch that is on the state of the pull request.

You might want to set up an alias by running

git config --global alias.pr '!f() { git fetch -fu ${2:-origin} refs/pull/$1/head:pr/$1 && git checkout pr/$1; }; f'

Now you can checkout any PR by running git pr <pr_number>, or git pr <pr_number> <remote> if your github remote is not named origin.


You can clone the branch you want by using the -b option and for pull request:

git clone https://github.com/user_name/repo_name.git -b feature/pull_request_name dir_name

In your case, the branch you want to clone is the source branch of the pull request (feature/mongoose-support):

git clone https://github.com/berstend/frappe.git -b feature/mongoose-support ./mongoose-support

git fetch origin refs/pull/PR_NUMBER/head:NEW_LOCAL_BRANCH

eg:

git fetch origin pull/611/head:pull_611
git checkout pull_611

Make changes, commit them, PUSH and open new PR from your fork on GitHub


You could follow the directions in this gist to be able to check out the remote directly without having to figure out their repository and branch.

Example usage

For one of my projects (github3.py) I have the following in my github3.py/.git/config

[remote "github"]
    fetch = +refs/heads/*:refs/remotes/github/*
    fetch = +refs/pull/*/head:refs/remotes/github/pr/*
    url = [email protected]:sigmavirus24/github3.py

The first line is what is standard for every remote with the exception that github is replaced by the remote's name. What this means is that remote heads (or the heads of branches on that server) are "mapped" to local remotes prefixed by github/. So if I did git fetch github and had a branch on GitHub that wasn't already noticed locally on my machine, it would download the branch and I could switch to it like so: git checkout -t github/branch_name.

The second line does the same thing, but it does it for pull requests instead of standard git branches. That's why you see refs/pull/*/head. It fetches the head of each pull request on GitHub and maps it to github/pr/#. So then if someone sends a pull request and it is numbered 62 (for example), you would do:

git fetch github
git checkout -t github/pr/62

And then you would be on a local branch called pr/62 (assuming it didn't already exist). It's nice and means you don't have to keep track of other people's remotes or branches.


git clone git://github.com/dweldon/frappe
cd frappe
git pull origin pull/2/head

How can I fetch an unmerged pull request for a branch I don't own?