I create a new branch in Git:
git branch my_branch
git push origin my_branch
You asked me to pull without telling me which branch you
want to merge with, and 'branch.my_branch.merge' in
your configuration file does not tell me, either. Please
specify which branch you want to use on the command line and
try again (e.g. 'git pull <repository> <refspec>').
See git-pull(1) for details.
If you often merge with the same branch, you may want to
use something like the following in your configuration file:
remote = <nickname>
merge = <remote-ref>
url = <url>
fetch = <refspec>
See git-config(1) for details.
git branch --set-upstream my_branch origin/my_branch
A shortcut, which doesn't depend on remembering the syntax for
git branch --set-upstream 1 is to do:
git push -u origin my_branch
... the first time that you push that branch. You only need to do it once, and that sets up the association between your branch and the one at
origin in the same way as
git branch --set-upstream does.
Personally, I think it's a good thing to have to set up that association between your branch and one on the remote explicitly. It's just a shame that the rules are different for
git push and
1 It may sound silly, but I very frequently forget to specify the current branch, assuming that's the default - it's not, and the results are most confusing :)
Update 2012-10-11: Apparently I'm not the only person who found it easy to get wrong! Thanks to VonC for pointing out that git 1.8.0 introduces the more obvious
git branch --set-upstream-to, which can be used as follows, if you're on the branch
git branch --set-upstream-to origin/my_branch
... or with the short option:
git branch -u origin/my_branch
This change, and its reasoning, is described in the release notes for git 1.8.0, release candidate 1:
It was tempting to say
git branch --set-upstream origin/master, but that tells Git to arrange the local branch
origin/masterto 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.