git push NOT current branch to remote

Alexey Kamenskiy picture Alexey Kamenskiy · Mar 29, 2013 · Viewed 7.9k times · Source

Is there a way in git bare repository to push a branch that is not in HEAD right now?

For example i have two branches:

$ git branch
* master
  another

And i have two remotes set: origin and another.

I need to be able push from another to another/another just in one command without changing HEAD.

Answer

RayLuo picture RayLuo · Sep 27, 2015

All those "another another" in the original question, the answer and lots of comments are so confusing (which is a perfect example of why it is important to name your things right in the first place), I can't help helping (pun not intended) to write yet another answer as below.

Q: Is there a way in git (bare) repository to push a branch that is not in HEAD right now? For example i have two branches and two remotes. I need to be able push from feature to upstream/feature just in one command without changing HEAD.

$ git branch
* master
  feature
$ git remote
origin
upstream

A: Do git push remote_name branch_name. In the case above, it looks like this.

$ git push upstream feature

Q: Does it mean that it will push local feature to upstream/feature? I always thought it will push current HEAD to upstream/feature.

A: Yes. The feature part is a refspec, which has the form src:dst. This means to push the local branch src to the remote branch dst. If :dst is omitted, the local branch src is pushed to the remote branch src. You can specify a different name as remote branch too. Just do:

$ git push upstream feature:cool_new_feature

(Thanks @gabriele-petronella and @alexkey for providing materials for this answer.)