首先,我们注意到git push
“想要”两个参数,如果您不提供它们,它们将自动完成。基本命令因此是git push remoterefspec
。
该remote
部分通常是微不足道的,因为它几乎总是只是字origin
。更棘手的部分是refspec
。最常见的情况是,人们在这里写下分支名称:例如git push origin master
。这会使用您的本地分支推送到远程上的同名分支,并在必要时创建它。但它不一定是只是的一个分支名称。
特别是,一个refspec
有两个冒号分开的部分。对于git push
,左侧的部分标识要推送什么,,右侧的部分标识要给远程的名称。在这种情况下左边的部分是branch_name
,右边的部分是branch_name_test
。例如:
git push origin foo:foo_test
当你在做推,你可以告诉你git push
同时设置你的分支的上游名字,加入-u
到git push
选项。设置上游名称会让你的git保存foo_test
(或其他名称)的名称,以便在你的foo
分支上没有参数的未来git push
可以尝试推送到远程的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将停止抱怨 - 但最简单的解决方案只是首先重命名您的本地分支,以便本地和远程名称匹配。 (什么设置来设置,和/或是否将重命名你的分支,是由你。)
更确切地说,混帐咨询您remote.remote.push
设置导出的Refspec的上游一半。如果你没有在这里设置任何东西,默认是使用相同的名称。
这不一定是分支名称。例如,您可以在这里提供HEAD
或提交散列。如果您使用除分支名称以外的其他名称,则可能必须在右侧列出完整的refs/heads/branch
(尽管取决于远程中已有的名称)。
请注意,如果您不包含'-u'或'--set-upstream'标志,则每次推送时都必须输入整个命令。直到上游设置完成后,'git push'才会自行工作。 – Scott
好点,编辑我的答案 –