git 2.0起默认push.default为simple,执行git config --global push.default simple可确保仅推送当前分支且要求本地与上游分支同名,兼顾安全与易用性。

Git全局配置push.default为simple模式
Git 2.0之后默认的push.default已改为simple,但如果你用的是旧版本(如1.x),或被其他配置覆盖过,推送时可能遇到“refusing to update checked out branch”或意外推到非当前分支的问题——这时候必须显式设为simple,否则git push行为不可控。
执行命令:确认并设置global push.default
直接运行这条命令即可生效,无需重启终端或重装Git:
git config --global push.default simple
验证是否成功:
git config --global push.default
输出应为simple。如果什么都没输出,说明没设上,检查是否有拼写错误或权限问题(比如家目录.gitconfig被chmod锁死)。
为什么必须用simple而不是upstream或current
simple是唯一同时满足“安全”和“符合直觉”的选项:
-
upstream要求本地分支已显式设置upstream(即带-u推送过),否则报错fatal: The current branch xxx has no upstream branch -
current会强制推同名远程分支,哪怕你本地切到了dev却想推main,它也只认分支名一致,不看tracking关系 -
simple只在本地分支名与远程追踪分支名一致时才允许推送,且自动关联(首次git push就等效于git push -u origin <branch></branch>),既防误推,又省去记-u的麻烦
注意:local配置会覆盖global,别被坑
如果某个仓库里执行过git config push.default upstream(无--global),那这个仓库就会无视全局设置,坚持用upstream。排查方法:
- 先查local:
git config push.default - 再查global:
git config --global push.default - 若local有值,且不是
simple,就用git config --unset push.default删掉它
这种覆盖机制很隐蔽,尤其当你在CI脚本或公司模板仓库里被预设了local config时,git push行为会突然变诡异。











