Git推送到远程分支
我试图遵循这个帖子,但感到困惑,而不是让我的问题得到解决。
这是场景。
我创建了一个像git checkout -b <branch_name>
的分支。 然后,我做了一些改变,并做了
git add .
git commit -m "comment"
现在所有这些更改都在我未提交的本地<branch_name>
分支中。 我想要做的是推动这些变化上游,但我想推到它不存在的分支,例如, <branch_name>_test
我不想将它推送到我的<branch_name>
。 我怎么能这样做。
只需将此分支推送到不同的分支名称即可
git push -u origin branch_name: branch_name_test
首先,让我们注意到git push
“想要”两个参数,如果你不提供它们,它们会自动完成它们。 因此基本的命令是git push remote refspec
。
remote
部分通常微不足道,因为它几乎总是单词的origin
。 更棘手的部分是refspec
。 大多数情况下,人们在这里写一个分支名称: git push origin master
,例如。 这会使用您的本地分支推送到远程的同名分支1,并在必要时创建它。 但它不一定只是一个分支名称。
特别是, refspec
有两个冒号分隔的部分。 对于git push
,左边的部分标识要推送的内容2,右边的部分标识要提供给远程的名称。 在这种情况下,左边的部分是branch_name
,右边的部分是branch_name_test
。 例如:
git push origin foo:foo_test
当你在执行push操作时,你可以通过在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 branch --set-upstream-to
。)
但是,如果你的git是2.0或更新的版本,并且你没有设置任何特殊的配置,你会遇到同样的事情,让我进入上面的脚注1: push.default
将被设置为simple
,这将拒绝推因为上游的名称不同于你自己的本地名称。 如果将push.default
设置为upstream
,git将停止抱怨 - 但最简单的解决方案是首先重命名本地分支,以便本地名称和远程名称匹配。 (要设置什么设置和/或是否要重命名分支,取决于您。)
更确切地说,git会咨询您的remote.remote.push
设置以获得refspec的上游一半。 如果你没有在这里设置任何东西,默认是使用相同的名称。
2这不一定是分支名称。 例如,您可以在这里提供HEAD
或提交散列。 如果您使用除分支名称以外的其他名称,则可能必须列出右侧的完整refs/heads/branch
(取决于远程中已有的名称)。
git push --set-upstream origin <branch_name>_test
--set-upstream
设置本地分支和远程之间的关联。 你只需要第一次做。 在随后的推送中,您可以执行以下操作:
git push
如果您还没有设置origin
,请使用:
git remote add origin <repository_url>
然后重试上述命令。