It seems to me that push's manpage contains a couple of inaccurate (or at least confusingly incomplete) statements about omitting the destination part of the refspec. First, the refspec section of the manpage has this to say: If `git push [<repository>]` without any `<refspec>` argument is set to update some ref at the destination with `<src>` with `remote.<repository>.push` configuration variable, `:<dst>` part can be omitted--such a push will update a ref that `<src>` normally updates without any `<refspec>` on the command line. Otherwise, missing `:<dst>` means to update the same ref as the `<src>`. Reading that, I'd think that, if I haven't configured remote.<repository>.push in a way that involves <src>, omitting <dst> will update the remote ref with the same name. But push.default is also consulted before falling back entirely to using the remote ref with the same name: $ git rev-parse --symbolic-full-name HEAD refs/heads/topic $ git rev-parse --symbolic-full-name @{upstream} refs/remotes/origin/master $ git -c push.default=upstream push -n origin topic ;# unmentioned case To ../rem 09cc638..58f7f72 topic -> master $ git branch --unset-upstream topic $ git -c push.default=upstream push -n origin topic ;# fallback case To ../rem * [new branch] topic -> topic Second, the example section says `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. Perhaps I'm misreading that, but I'd interpret that as saying the remote ref with the same name will always be updated, but that doesn't match the refspec description of an omitted destination shown above or the push.default-dependent behavior demonstrated in the example above.