Github: Import upstream branch into fork

GitGithub

Git Problem Overview


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.

Git Solutions


Solution 1 - Git

  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)

Solution 2 - Git

I would use

git checkout -b <new_branch> upstream/<new_branch>

Solution 3 - Git

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. e.g. It looked like this

[remote "somebody"]
        url = [email protected]: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/*

Solution 4 - Git

The following steps worked well for me (assuming the upstream branch name is branch):

$ git fetch upstream
$ git checkout branch
$ git push origin

Solution 5 - Git

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 = [email protected]:<your_user/org>/<repo>.git
fetch = +refs/heads/*:refs/remotes/origin/*

[branch "master"]
remote = origin
merge = refs/heads/master
rebase = true

[remote "upstream"]
url = [email protected]:<upstream_user>/<repo>.git
fetch = +refs/heads/*:refs/remotes/upstream/*

[remote "other_user"]
url = [email protected]:<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 fork.

To push that local branch I had to be specific with my push command.

git push origin <branch>

Solution 6 - Git

--track?

git branch --track branch upstream/branch

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionpokeView Question on Stackoverflow
Solution 1 - GiturschreiView Answer on Stackoverflow
Solution 2 - GitSvenitoView Answer on Stackoverflow
Solution 3 - GitIan WillView Answer on Stackoverflow
Solution 4 - GitEneko AlonsoView Answer on Stackoverflow
Solution 5 - GitokorView Answer on Stackoverflow
Solution 6 - GittroelsknView Answer on Stackoverflow