git's Matching vs Simple Push

April 20, 2014 · 2 minute read

If, like me, you’ve upgraded your git version and now get a somewhat cryptic message about push.default whenever you git push, then this is the post for you.

Here’s the message verbatim:

warning: push.default is unset; its implicit value is changing in
Git 2.0 from 'matching' to 'simple'. To squelch this message
and maintain the current behavior after the default changes, use:

  git config --global push.default matching

To squelch this message and adopt the new behavior now, use:

  git config --global push.default simple

When push.default is set to 'matching', git will push local branches
to the remote branches that already exist with the same name.

In Git 2.0, Git will default to the more conservative 'simple'
behavior, which only pushes the current branch to the corresponding
remote branch that 'git pull' uses to update the current branch.

See 'git help config' and search for 'push.default' for further information.
(the 'simple' mode was introduced in Git 1.7.11. Use the similar mode
'current' instead of 'simple' if you sometimes use older versions of Git)

The gist is that the default behavior of git push prior to version 1.7.11 was to push all your local branches that had matching names on the remote. This, of course, could cause you to unintentionally push changes from branches outside your current branch.

In 1.7.11, the developers introduced simple mode, which will only push the current branch to the branch that git pull would pull from: you only push one branch’s worth of changes. In my opinion, this is a much saner default behavior. Given that version 2.0 will use simple as its default, it seems the developers agree.

If you also agree, then just do as they say and run this command to set your default to simple mode:

$ git config --global push.default simple