2009-05-04 116 views
193

我正在使用本地git存储库。有两个分支,masterfeature_x你如何推动一个单一的Git分支(并没有其他分支)?

我想推feature_x到远程回购,但我不想推动master分支上的更改。

请问git push origin feature_x从我的feature_x分支(feature_x分支已经存在于远端)工作吗?

我不想测试这个在我的箱子,因为我不能推到主现在。

+0

看看这里:[远程](http://git.or.cz/course/svn.html#remote)和在这里:[push a branch to github](http://github.com/guides/push-a-branch-to-github)听起来好像会起作用。 – 2009-05-04 14:01:20

回答

307

是的,只是做了以下

git checkout feature_x 
git push origin feature_x 
+48

使用现代的git,你应该可以简单地“git push origin HEAD”,甚至是“git push head”,只推送当前签出的分支。 – 2009-05-05 09:11:39

+2

是否需要结帐到feature_x? – 2012-11-28 11:45:58

+5

是的,因为如果你是主人,它会尝试将本地主分支推送到远程feature_x分支。不必先结帐,你必须做“git push origin feature_x:feature_x” – cpjolicoeur 2012-11-28 21:42:20

60

默认情况下git push更新所有的远程分支机构。但你可以配置git只更新当前分支到它的上游。

git config push.default upstream 

这意味着git只会在您执行git push时更新当前(签出)分支。

其它有效的选项有:

  • nothing:不要推,除非一个的Refspec明确给出什么(错误输出)。这主要是针对那些想要通过始终明确避免错误的人。
  • matching:推其两端的同名所有分支。 (前版本1.7.11默认选项)
  • upstream:把当前分支到其上游 分支。这种模式只有在您推送到您通常需要从同一个存储库中提取时才有意义(即中央工作流程)。 本地和远程分支不需要具有相同的名称
  • tracking:不赞成使用,使用upstream代替。
  • current:推当前分支到接收端的同名的远程分支。适用于中央和非中央工作流程。
  • simple:可用自版本1.7.11]在集中式工作流程,工作就像upstream与添加的安全拒绝推,如果上游分支的名字是从当地一个不同。当推送到与您通常从中拉出的远程设备不同的远程设备时,其工作方式为current。这是最安全的选择,适合初学者。该模式已成为Git 2.0中的默认模式。
+2

谢谢,'current'是我正在寻找的,默认'foo'分支中的'git push'会将它推送到'origin/foo'分支。 – Dorian 2014-02-25 14:51:25

+0

@Dorian谢谢,我同意'current'作为默认值更有意义。 – 2015-04-15 15:16:32

+0

@Dorian,@Zoltán - 我觉得'简单'作为默认值更有意义。我更新了'何时使用'的答案。请看看。 – 2015-04-16 06:55:21

4

上的Karthik Bose's answer顶小的更新 - 你可以全局配置git的,影响到所有的工作区的行为是那样:

git config --global push.default upstream 
+0

上游没有被认为是对我有效的设置,必须将“当前”改为 – grasshopper 2014-09-16 18:27:07

-2

因此,让我们假设你有一个地方分支FOO,远程叫起源和远程分支起源/主。

要推foo的内容到原点/主,首先需要设置其上游:

git push origin HEAD:master 

在最后的命令:

git checkout foo 
git branch -u origin/master 

然后,可以使用推到这个分支您可以添加 - force来替换foo的所有origin/master的历史记录。