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:
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.
jack
June 4, 2009 at 5:52 pm
OK, fair enough. “git config push.default current” might be a good way to shush the ebullient warning.
June 5, 2009 at 3:35 am
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.
June 5, 2009 at 9:21 pm
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)
July 2, 2009 at 1:21 am
Thanks, Alastair!
July 2, 2009 at 7:19 am
Thanks Alex (and Alastair) – just ran into this as well. +1 to Jack and Bryan for “current”
July 6, 2009 at 10:12 pm
Thanks a lot guys!
July 12, 2009 at 2:27 am
Thanks.
July 17, 2009 at 1:16 am
Adding my thanks: Thanks!
July 18, 2009 at 12:37 pm
So what is the difference between “tracking” and “current”?
Where does “current” push to?
August 20, 2009 at 2:26 pm
Mitch — Um… uh… I have no idea.
September 2, 2009 at 3:16 pm
>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: http://www.kernel.org/pub/software/scm/git/docs/git-config.html#_variables
September 9, 2009 at 11:48 am
Thanks, Jamie.
So when does the upstream branch not have the same name?
September 9, 2009 at 12:02 pm
When you create your local branch with a different name? (don’t do that)
September 9, 2009 at 1:51 pm
@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?
September 10, 2009 at 8:02 am
It’s bad because I’ve never done that.
Move along… move along…
September 10, 2009 at 4:04 pm
thanks it helped!
September 13, 2009 at 8:34 am
Thanks for taking the time to do this post. It was really bugging me.
September 17, 2009 at 3:45 am
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
March 18, 2013 at 1:06 pm