Glad You're Ready. Let's Get Started!

Let us know how we can contact you.

Thank you!

We'll respond shortly.

  • Blog Navigation
git config push.default matching

Upgraded to git 1.6.3 yet? You should, and Jason Rudolph says why (and if you’re on a Mac, Rob Sanheim says how.)

Sadly, after you do upgrade, when you start doing “git push”, your console will start to be littered with the following oddly patronizing message:

warning: You did not specify any refspecs to push, and the current remote
warning: has not configured any push refspecs. The default action in this
warning: case is to push all matching refspecs, that is, all branches
warning: that exist both locally and remotely will be updated.  This may
warning: not necessarily be what you want to happen.
warning: You can specify what action you want to take in this case, and
warning: avoid seeing this message again, by configuring 'push.default' to:
warning:   'nothing'  : Do not push anything
warning:   'matching' : Push all matching branches (default)
warning:   'tracking' : Push the current branch to whatever it is tracking
warning:   'current'  : Push the current branch

While I’m generally in favor of verbose warnings, this one is kind of bizarre. Essentially, it’s saying, “Warning! The command you just ran will continue to operate exactly as it did before!” Guys, telling us about new options is great but that’s what release notes are for.

Worse, they don’t provide keystroke-level instruction beyond the offhand gerund “configuring” on how to shush it. Here’s the result of my 8-minute speluking inside the output of “git help config”:

git config push.default matching

[Or, thanks to Alastair Brunton below

git config --global push.default matching


There, now, that wasn’t so hard after all, was it?

  • Alex,

    I recently went through the same change, but decided to go with current instead of matching. With current I know its only the branch I’m on that’s getting pushed, rather than possibly a bunch of other branches that may not be ready. Given how easy it is to switch to branches and then git push, I feel its worth the couple seconds extra effort.


  • Alex Chaffee

    OK, fair enough. “git config push.default current” might be a good way to shush the ebullient warning.

  • I just saw that error as well. I had assumed I had borked my git setup, but I did change it current just like Jack.

  • Also if you have lots of repositories, you can add this to the global config with:

    “git config –global push.default matching”

    (or with one of the other push defaults)

  • Alex Chaffee

    Thanks, Alastair!

  • Thanks Alex (and Alastair) – just ran into this as well. +1 to Jack and Bryan for “current”

  • Johann

    Thanks a lot guys!

  • Thanks.

  • Adding my thanks: Thanks!

  • Mitch

    So what is the difference between “tracking” and “current”?

    Where does “current” push to?

  • Alex Chaffee

    Mitch — Um… uh… I have no idea.

  • >So what is the difference between “tracking” and “current”?

    From ‘man git-config’:

    nothing: do not push anything.

    matching: push all matching branches. All branches having the same name in both ends are considered to be matching. This is the default.

    tracking: push the current branch to its upstream branch.

    current: push the current branch to a branch of the same name.

    see also:

  • Alex Chaffee

    Thanks, Jamie.

    So when does the upstream branch not have the same name?

  • Joseph Palermo

    When you create your local branch with a different name? (don’t do that)

  • Josh Susser

    @Joseph: I create local branches with names that are different from the remote name if I’m using multiple remotes. That’s required if the remote branches have the same name within their respective repos. Why is that bad to do?

  • Joseph Palermo

    It’s bad because I’ve never done that.

    Move along… move along…

  • dilip

    thanks it helped!

  • David T

    Thanks for taking the time to do this post. It was really bugging me.

  • Somewhere along the lines since this discussion, the available options for push.default have changed, so I thought I ‘d update this thread with the latest (1.8) possibilities:

    git config push.default:

    – nothing: do nothing (make the user say what they mean)

    – matching: push all local branches for which a remote branch of the same name exists

    – upstream: push only the current branch, push it to its upstream, making push and pull symmetric

    – simple: like upstream, but only if the branch names match (will become default in 2.0)

    – current: push just the current branch

Share This