欢迎关注微信公众号:全栈工厂
本文主要参考
问题:
近日在操作git时发现:在本地新建一个分支,添加代码后push,提示:
The current branch newBranch has no upstream branch.
To push the current branch and set the remote as upstream, use
git push --set-upstream origin newBranch
之所以出现这样的警告,和git的push默认配置push.default有关,push.default的配置选项有五个:nothing、current、upstream、simple、matching。它们的作用分别为:
- nothing: 直接push会出错,需要显式的指出推送的远程分支,例如:git push origin master;
- current: 推送时只会推送当前所在的分支到远程同名分支,如果远程分支不存在相应的同名分支,则创建该分支;
- upstream: 推送当前分支到它的upstream分支上,这个模式只适用于推送到与拉取数据相同的仓库(比如central workflow);
- simple: 在中央仓库工作流程模式下,只能推送到与本地分支名一致的upstream分支中,如果推送的远程仓库和拉取数据的远程仓库不一致,那么该模式会像current模式一样进行操作。因为该选项对于新手来说是最安全的,所以在git 2.0中,simple是push.default的默认值配置项(2.0以前的默认配置项是matching);
- matching:推送本地和远程都存在的同名分支。
了解了push.default的五个配置选项,我们可以查看自己所在git环境的push.default配置选项,git有三个不同的配置文件:local(仓库)、global(全局)、system(系统),它们的优先级为local>global>system,如果我们之前没有手动配置过该选项,我们可以在system配置文件中看到它的默认配置:
git config --system -l
我们可以通过下面的命令修改默认配置:
git config --global push.default matching
最后:
在了解问题的原因后,我们可以通过以下两个方法解决问题:
- 修改仓库默认配置为current: git config --local push.default current,然后git push;
- 指定push的远程分支名如: git push origin newBranch(个人推荐)
注:文中如有任何错误,请各位批评指正!