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.)