2009-05-04 92 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的歷史記錄。

相關問題