2016-03-21 212 views
18

我试图按照this post,但感到困惑,而不是让我的问题得到解决。Git推送到远程分支

这是场景。

我创建了一个分支,如git checkout -b <branch_name>。然后我曾在一些改变,做

  1. git add .
  2. git commit -m "comment"

现在,所有这些变化都在我未提交当地<branch_name>分支。我想要做的是推动这些变化上游,但我想把它推到不存在的分支,例如,<branch_name>_test

我不想把它推到我的<branch_name>。我怎么能这样做。

回答

14

这个分支简单地推到不同的分支名

git push -u origin branch_name: branch_name_test 
+1

请注意,如果您不包含'-u'或'--set-upstream'标志,则每次推送时都必须输入整个命令。直到上游设置完成后,'git push'才会自行工作。 – Scott

+0

好点,编辑我的答案 –

8

git push --set-upstream origin <branch_name>_test

--set-upstream设置你的本地分支和远程之间的关联。你只需要第一次做。在随后的推动,你可以这样做:

git push

如果你没有设置origin然而,使用:

git remote add origin <repository_url>然后重试上面的命令。

+0

正如我所说的,我不想把它推到我的分支,它是''。我想把它推到一个新的分支' _test',它截至目前不存在 –

+0

对不起,没有看到。更新了我的答案。您可以任意指定远程分支的名称,只需在'push'命令中调整最后一个参数即可。 – Scott

5

随着现代版本的Git,使用的命令是:

git push -u origin <branch_name_test> 

这将自动设置分支名从远程跟踪并一气呵成。

4

你可以把你的本地分支到远程分支,像这样:

git push origin master:test 

(假设origin是你的遥控器,master是当地的支行名称和test是新的远程分支的名字,你想创建。)

如果同时你想设置你的本地分支来跟踪新创建的远程分支,你可以用-u(在新版本的Git上)或--set-upstream这样做:

git push -u origin master:test 

git push --set-upstream origin master:test 

...将创建一个新的远程分支,命名为test,在远程仓库origin,根据当地master设置本地master跟踪它。

27

首先,我们注意到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同时设置你的分支的上游名字,加入-ugit 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(尽管取决于远程中已有的名称)。