【Git】git push.default 简析

本文主要参考

  • https://git-scm.com/docs/git-config
问题:

近日在操作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】git push.default 简析_第1张图片
git.jpeg

我们可以通过下面的命令修改默认配置:

git config --global push.default matching

最后:

在了解问题的原因后,我们可以通过以下两个方法解决问题:

  • 修改仓库默认配置为current: git config --local push.default current,然后git push;
  • 指定push的远程分支名如: git push origin newBranch(个人推荐)

注:文中如有任何错误,请各位批评指正!

你可能感兴趣的:(【Git】git push.default 简析)