(Please CC me as I am not subscribed.) $ git config -l | grep '^branch.master\|^push.' push.default=upstream branch.master.remote=upstream branch.master.merge=refs/heads/master branch.master.pushremote=origin $ git branch * master $ git push fatal: You are pushing to remote 'origin', which is not the upstream of your current branch 'master', without telling me what to push to update which remote branch. push.default=upstream means "push back where it came from (*)". However, if I specifically define remote.pushdefault or branch.*.pushremote, this clearly means I don't want to do (*) in this case. The question here then is, what remote branch should git push to - since pushremote only specifies a repo? I can suggest two options: - A: push to branch.*.merge if it's defined; otherwise push to (like push.default=current) - B: push to regardless B is probably simpler and means you can amend the push.default manual entry more easily: upstream: [..] This mode only makes sense if you are pushing to the same repository you would normally pull from (i.e. central workflow). If you are not pushing to the same repository, acts as "current". (Note again; that this is a special case when push.default=upstream because of the "this mode only makes sense" semantics. The other values for push.default are simpler and do not result in a conflict.) Alternatively, an even more simple behaviour is to adjust the error message to communicate the root cause: $ git push fatal: branch.*.pushremote is not compatible with push.default = upstream X -- GPG: 4096R/1318EFAC5FBBDBCE git://github.com/infinity0/pubkeys.git