Today we delve into the world of
git push, one of the most often used git
git push is typically used to update a remote ref and associated
objects based on a local ref – in other words, to push your local changes to an
upstream repository – but you can also use it to create or delete remote
much, much more! actually, that’s about it.
Just The Tip
The most common use of
git push is to push your local changes to your public
upstream repository. Assuming that the upstream is a remote named “origin” (the
default remote name if your repository is a clone) and the branch to be updated
to/from is named “master” (the default branch name), this is done with:
git push origin master
Get used to this. You’ll be doing it a lot.
A Bit Deeper
Git uses the term “refspec” when describing the usage of some of its commands.
A refspec is essentially a name that git can resolve to a commit object. This
can be the name of a branch or an arbitrary “SHA1 expression” such as
Git gives you a lot of ways to refer to a commit but for most purposes you’ll
just use the name of a branch with
The kernel.org manpage for git pull
will rather cryptically tell you that “The canonical format of a
<refspec> parameter is
+?<src>:<dst>”. Most of the time this translates
<branch to push from>:<branch to push to>. The branch to push from and the
colon are optional. If left out, git will push from the local branch to the
remote branch of the same name. If no refspec is used at all, git will push all
“heads” (f.e. branches) on the local to matching heads that exist on the
In practice, this means that:
git push originwill push changes from all local branches to matching branches the origin remote.
git push origin masterwill push changes from the local master branch to the remote master branch.
git push origin master:stagingwill push changes from the local master branch to the remote staging branch if it exists.
Tips and Tricks
Create a Remote Branch
git push origin master:refs/heads/staging will create the branch
the origin by copying the local @master@ branch
Delete a Remote Branch
git push origin :staging will delete the branch
staging from the origin repository.
Set Up A Branch’s Default Remote
You can use git config to assign a default remote to a given branch. This default remote will be used to push that branch unless otherwise specified.
This is already done for you when you use
git clone, allowing you to use
push without any arguments to push the local master branch to update the
origin repository’s master branch.
git config branch.<name>.remote <remote> can be used to specify this manually.