简体   繁体   中英

Github: Import upstream branch into fork

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

edit

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 .

  1. Make sure you've pulled the new upstream branch into your local repo :

    • First, ensure your working tree is clean (commit/stash/revert any changes)
    • Then, git fetch upstream to retrieve the new upstream branch
  2. Create and switch to a local version of the new upstream branch ( newbranch ):

    • git checkout -b newbranch upstream/newbranch
  3. 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM