git push
Works like git push <remote>, where <remote> is the current
branch's remote (or origin, if no remote is configured for
the current branch).
git push origin
Without additional configuration, pushes the current branch
to the configured upstream (branch.<name>.merge configuration
variable) if it has the same name as the current branch, and
errors out without pushing otherwise.
The default behavior of this command when no <refspec> is
given can be configured by setting the push option of the
remote, or the push.default configuration variable.
For example, to default to pushing only the current branch to
origin use git config remote.origin.push HEAD. Any valid
<refspec> (like the ones in the examples below) can be
configured as the default for git push origin.
git push origin :
Push "matching" branches to origin. See <refspec> in the
OPTIONS section above for a description of "matching"
branches.
git push origin master
Find a ref that matches master in the source repository (most
likely, it would find refs/heads/master), and update the same
ref (e.g. refs/heads/master) in origin repository with it.
If master did not exist remotely, it would be created.
git push origin HEAD
A handy way to push the current branch to the same name on
the remote.
git push mothership master:satellite/master dev:satellite/dev
Use the source ref that matches master (e.g.
refs/heads/master) to update the ref that matches
satellite/master (most probably
refs/remotes/satellite/master) in the mothership repository;
do the same for dev and satellite/dev.
See the section describing <refspec>... above for a
discussion of the matching semantics.
This is to emulate git fetch run on the mothership using git
push that is run in the opposite direction in order to
integrate the work done on satellite, and is often necessary
when you can only make connection in one way (i.e. satellite
can ssh into mothership but mothership cannot initiate
connection to satellite because the latter is behind a
firewall or does not run sshd).
After running this git push on the satellite machine, you
would ssh into the mothership and run git merge there to
complete the emulation of git pull that were run on
mothership to pull changes made on satellite.
git push origin HEAD:master
Push the current branch to the remote ref matching master in
the origin repository. This form is convenient to push the
current branch without thinking about its local name.
git push origin master:refs/heads/experimental
Create the branch experimental in the origin repository by
copying the current master branch. This form is only needed
to create a new branch or tag in the remote repository when
the local name and the remote name are different; otherwise,
the ref name on its own will work.
git push origin :experimental
Find a ref that matches experimental in the origin repository
(e.g. refs/heads/experimental), and delete it.
git push origin +dev:master
Update the origin repository's master branch with the dev
branch, allowing non-fast-forward updates. This can leave
unreferenced commits dangling in the origin repository.
Consider the following situation, where a fast-forward is not
possible:
o---o---o---A---B origin/master
\
X---Y---Z dev
The above command would change the origin repository to
A---B (unnamed branch)
/
o---o---o---X---Y---Z master
Commits A and B would no longer belong to a branch with a
symbolic name, and so would be unreachable. As such, these
commits would be removed by a git gc command on the origin
repository.