The best answers to the question “Make an existing Git branch track a remote branch?” in the category Dev.
I know how to make a new branch that tracks remote branches, but how do I make an existing branch track a remote branch?
I know I can just edit the
.git/config file, but it seems there should be an easier way.
You can do the following (assuming you are checked out on master and want to push to a remote branch master):
Set up the ‘remote’ if you don’t have it already
git remote add origin ssh://...
Now configure master to know to track:
git config branch.master.remote origin git config branch.master.merge refs/heads/master
git push origin master
Given a branch
foo and a remote
As of Git 1.8.0:
git branch -u upstream/foo
Or, if local branch
foo is not the current branch:
git branch -u upstream/foo foo
Or, if you like to type longer commands, these are equivalent to the above two:
git branch --set-upstream-to=upstream/foo git branch --set-upstream-to=upstream/foo foo
As of Git 1.7.0 (before 1.8.0):
git branch --set-upstream foo upstream/foo
- All of the above commands will cause local branch
footo track remote branch
- The old (1.7.x) syntax is deprecated in favor of the new (1.8+) syntax. The new syntax is intended to be more intuitive and easier to remember.
- Defining an upstream branch will fail when run against newly-created remotes that have not already been fetched. In that case, run
git fetch upstreambeforehand.
See also: Why do I need to do `–set-upstream` all the time?
For Git versions 1.8.0 and higher:
Actually for the accepted answer to work:
git remote add upstream <remote-url> git fetch upstream git branch -f --track qa upstream/qa # OR Git version 1.8.0 and higher: git branch --set-upstream-to=upstream/qa # Gitversions lower than 1.8.0 git branch --set-upstream qa upstream/qa
I do this as a side-effect of pushing with the
-u option as in
$ git push -u origin branch-name
The equivalent long option is
git-branch command also understands
--set-upstream, but its use can be confusing. Version 1.8.0 modifies the interface.
git branch --set-upstreamis deprecated and may be removed in a relatively distant future.
git branch [-u|--set-upstream-to]has been introduced with a saner order of arguments.
It was tempting to say
git branch --set-upstream origin/master, but that tells Git to arrange the local branch “origin/master” to integrate with the currently checked out branch, which is highly unlikely what the user meant. The option is deprecated; use the new
--set-upstream-to(with a short-and-sweet
-u) option instead.
Say you have a local
foo branch and want it to treat the branch by the same name as its upstream. Make this happen with
$ git branch foo $ git branch --set-upstream-to=origin/foo
$ git branch --set-upstream-to=origin/foo foo