首先,让我们注意git push“需要”另外两个参数,如果您不提供它们,它们会自动组成。因此,基本命令是git push <em>remote</em> <em>refspec</em>。
remote 部分通常是微不足道的,因为它几乎总是只是单词origin。更棘手的部分是 refspec。最常见的是,人们在这里写一个分支名称:例如git push origin master。这使用您的本地分支推送到远程上同名的分支1,如有必要,创建它。但它不一定是只是一个分支名称。
特别是,refspec 有两个以冒号分隔的部分。对于git push,左边的部分标识要推送的内容,2,右边的部分标识要给遥控器的名称。在这种情况下,左边的部分是 branch_name,右边的部分是 <i>branch_name</i>_test。例如:
git push origin foo:foo_test
当您进行推送时,您可以告诉您的git push 同时设置您的分支的上游名称,方法是将-u 添加到git push 选项中。设置上游名称使您的 git 保存 foo_test(或其他)名称,以便将来的 git push 没有参数,当您在 foo 分支上时,可以尝试推送到 foo_test 上远程(git 还保存远程,在这种情况下origin,因此您也不必输入)。
你只需要传递一次-u:它基本上只是为你运行git branch --set-upstream-to。 (如果您稍后再次传递-u,它会重新运行上游设置,按照指示更改它;或者您可以自己运行git branch --set-upstream-to。)
但是,如果你的 git 是 2.0 或更高版本,并且你没有设置任何特殊配置,你会遇到让我在上面输入脚注 1 的同样的事情:push.default 将被设置为 simple,它将拒绝推送,因为上游的名称与您自己的本地名称不同。如果将push.default 设置为upstream,git 将停止抱怨——但最简单的解决方案是先重命名本地分支,以便本地和远程名称匹配。 (设置什么设置,和/或是否重命名您的分支,由您决定。)
1更准确地说,git 会参考您的 remote.<em>remote</em>.push 设置来导出 refspec 的上游一半。如果您在此处没有设置任何内容,则默认是使用相同的名称。
2这不一定是分支名称。例如,您可以在此处提供 HEAD 或提交哈希。如果您使用的不是分支名称,您可能必须在右侧拼出完整的refs/heads/<em>branch</em>(这取决于遥控器上已有的名称)。