2013-03-29 100 views
10

有没有办法在git 存储库来推送一个不在HEAD中的分支?git push NOT当前分支到远程

,比如我有两个分支:

$ git branch 
* master 
    another 

而且我有两个遥控器设置:originanother

我需要能够从another推到another/another只需一个命令而不改变HEAD。

+0

你可能会考虑没有为远程和分支完全相同的名称。这很混乱。 –

+3

你可以使用'git branch -m another another_branch'或'git remote rename another another_remote' –

+2

@KlasMellbourn,这仅仅是为了举例。当然,我没有这个怪异的命名。 – AlexKey

回答

10

随着git push您可以指定远程和本地

git push another another 
+0

这是否意味着它会将本地另一个推向另一个?我一直认为它会将'当前HEAD'推到另一个。 – AlexKey

+3

是的。 (第二个)'another'是一个refspec,它(通常)的格式为src:dst。这意味着将本地分支'src'推送到远程分支'dst'。如果':dst'被省略,本地分支'src'被推送到远程分支'src'。 –

+1

当前的HEAD只是默认设置,但是您可以指定任何分支(或更通常的任何refspec),正如Lars指出的那样 –

23

所有这些“另一个另一”在原来的问题,答案和大量的意见是如此混乱(这也是它一个很好的例子重要的是要首先命名你的东西),我不禁帮助(不打算用双关语)写下如下的答案。

问:git(裸)存储库是否有办法在HEAD中将而不是的分支推入?例如,我有两个分支和两个遥控器。我需要能够从feature推到upstream/feature只需一个命令而不改变HEAD。

$ git branch 
* master 
    feature 
$ git remote 
origin 
upstream 

答:这样做。

$ git push upstream feature 

问:这是否意味着,这将推动当地featureupstream/feature?我一直认为它会将当前HEAD推到upstream/feature。 A:是的。 feature部分是refspec,其通常具有src:dst的形式。这意味着将本地分支src推送到远程分支dst。如果省略:dst,则将本地分支src推送到远程分支src。您也可以指定一个不同的名称作为远程分支。只要做到:

$ git push upstream feature:cool_new_feature 

(感谢@加布里埃莱 - petronella和@alexkey为这个答案提供的材料。)

+0

请注意,“上游”只是特定远程的别名。赔率是,如果你一直在线上遵循最典型的约定(即,你复制粘贴很多),它实际上是“起源”。请参阅:https://stackoverflow.com/questions/9529497/what-is-origin-in-git – Kat

+0

@Kat:虽然'上游'和'起源'是“只是”一个特定的远程别名,他们有不同的按照[github fork工作流]的惯例(https://help.github.com/articles/configuring-a-remote-for-a-fork/)来表示。不要以为你总是可以在任何git命令中用'origin'替换'upstream',除非你知道你在做什么。 – RayLuo