jmacdonagh jmacdonagh - 4 months ago 16
Git Question

How can I push a local Git branch to a remote with a different name easily?

I've been wondering if there's an easy way to push and pull a local branch with a remote branch with a different name without always specifying both names.

For example:

$ git clone myrepo.git
$ git checkout -b newb
$ ...
$ git commit -m "Some change"
$ git push origin newb:remote_branch_name


Now if someone updates remote_branch_name, I can:

$ git pull


And everything is merged / fast-forwarded. However, if I make changes in my local "newb", I can't:

$ git push


Instead, I have to:

% git push origin newb:remote_branch_name


Seems a little silly. If
git-pull
uses
git-config branch.newb.merge
to determine where to pull from, why couldn't
git-push
have a similar config option? Is there a nice shortcut for this or should I just continue the long way?

Answer

Sure. Just set your push.default to upstream to push branches to their upstreams (which is the same that pull will pull from, defined by branch.newb.merge), rather than pushing branches to ones matching in name (which is the default setting for push.default, matching).

git config push.default upstream

Note that this used to be called tracking not upstream before Git 1.7.4.2, so if you're using an older version of Git, use tracking instead. The push.default option was added in Git 1.6.4, so if you're on an older version than that, you won't have this option at all and will need to explicitly specify the branch to push to.