I have a fork ( origin
) from a project ( upstream
) on github. Now the upstream project has added a new branch, I want to import into my fork. How do I do that?
I tried checking out the remote and creating a branch on top of that, but that configures the branch the way that git push
is trying to push to the upstream
:
git checkout upstream/branch
git checkout -b branch
Maybe that wasn't clear, but I want to add the branch to my local repository, so I can push it to origin
(my fork) via git push
. Because upstream repositories are usually read-only and you fork it to contribute.
So I basically want to checkout a non-existent branch on origin
whose contents will be pulled in from upstream
.
Make sure you've pulled the new upstream branch into your local repo :
git fetch upstream
to retrieve the new upstream branch Create and switch to a local version of the new upstream branch ( newbranch
):
git checkout -b newbranch upstream/newbranch
When you're ready to push the new branch to origin :
git push -u origin newbranch
The -u switch sets up tracking to the specified remote (in this example, origin
)
我会用
git checkout -b <new_branch> upstream/<new_branch>
I had trouble with this too, and google took me here. The solutions didn't work however. My problem was that when i added my upstream, it set up my git config to only fetch master, rather than all branches. eg It looked like this
[remote "somebody"]
url = git@github.com:somebodys/repo.git
fetch = +refs/heads/master:refs/remotes/upstream/master
Editing .git/config as follows fixed my problem
[remote "somebody"]
url = git@github.com:somebodys/repo.git
fetch = +refs/heads/*:refs/remotes/upstream/*
I had a slightly more complicated scenario where I already had an upstream
defined in my fork (from the canonical repo) but needed to checkout a branch from a different fork. To get that done, the process is slightly different. Here's the config I ended up with:
[remote "origin"]
url = git@github.com:<your_user/org>/<repo>.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master
rebase = true
[remote "upstream"]
url = git@github.com:<upstream_user>/<repo>.git
fetch = +refs/heads/*:refs/remotes/upstream/*
[remote "other_user"]
url = git@github.com:<other_user>/<repo>.git
fetch = +refs/heads/*:refs/remotes/<other_user>/*
Now you can checkout a branch from <other_user>
fork as well.
git fetch <other_user> <branch>
git checkout -b <branch> <other_user>/<branch>
That will give you a local branch which is derived from the <other_user> fork.
To push that local branch I had to be specific with my push command.
git push origin <branch>
The following steps worked well for me (assuming the upstream branch name is branch
):
$ git fetch upstream
$ git checkout branch
$ git push origin
--track
?
git branch --track branch upstream/branch
From the UI:
In your fork go to Branches, click 'New Branch'. There you would select the source - either your fork or upstream. Select upstream and select the branch that you want to 'import'. Create the branch with the same name. Done.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.