协慌网

登录 贡献 社区

没有指定分支的 “git push” 的默认行为

我使用以下命令推送到我的远程分支:

git push origin sandbox

如果我说

git push origin

这会推动我的其他分支的变化,还是只更新我当前的分支?我有三个分支: masterproductionsandbox

git push文档对此并不十分清楚,所以我想澄清这一点。

哪些分支和遥控器执行以下git push命令更新?

git push 
git push origin

上面的origin是遥远的。

据我所知, git push [remote] [branch]只会将该分支推送到远程。

答案

您可以通过在 git config 中设置 push.default 来控制默认行为。从git-config(1)文档

push.default

如果在命令行上没有给出 refspec,在远程中没有配置 refspec,并且命令行上给出的任何选项都没有暗示 refspec,则定义 git push 应采取的操作。可能的值是:

  • nothing :不要推动任何东西

  • matching :推送所有匹配的分支

    两端具有相同名称的所有分支都被认为是匹配的。

    这曾经是默认值,但不是因为 Git 2.0( simple是新的默认值)。

  • upstream :将当前分支推送到其上游分支( tracking是上游的弃用同义词)

  • current :将当前分支推送到同名分支

  • simple :(在 Git 1.7.11 中新增)像上游一样,但如果上游分支的名称与本地名称不同,则拒绝推送

    这是最安全的选择,非常适合初学者。

    此模式已成为 Git 2.0 中的默认模式。

简单,当前和上游模式适用于那些想要在完成工作后推出单个分支的人,即使其他分支尚未准备好被推出

命令行示例:

要查看当前配置:

git config --global push.default

要设置新配置:

git config --global push.default current

git push origin将推送在origin上具有匹配远程分支的本地分支上的所有更改。对于git push

git push <remote> ,其中<remote>是当前分支的远程(如果没有为当前分支配置远程,则为 origin)。

git-push手册页的 Examples 部分

您可以使用 push.default 为您的 git 设置默认行为

git config push.default current

或者如果您有许多存储库并希望所有存储库都相同

git config --global push.default current

此设置中的当前流量意味着默认情况下, 只有在执行git push才会推送当前分支

其他选择是:

  • 没有:不要推动任何东西
  • 匹配:推送所有匹配的分支(默认)
  • 跟踪:将当前分支推送到跟踪的任何分支
  • current:推送当前分支

更新 - 新方式做到这一点

从 Git 1.7.11 开始,执行以下操作:

git config --global push.default simple

这是一个引入的新设置,其工作方式与当前相同,并且根据谣言将从 v 2.0 默认为 git