2013-08-03 48 views
1

如果我在回購的分支上工作,說devel,以下命令之間有什麼區別?在這種情況下,我已經添加了upstream遠程:指定分支參數爲混帳提取,合併和推動

$ git fetch upstream devel 
From github.com:meteor/meteor 
* branch   devel  -> FETCH_HEAD 

$ git fetch upstream 
remote: Counting objects: 500, done. 
remote: Compressing objects: 100% (230/230), done. 
remote: Total 326 (delta 227), reused 187 (delta 90) 
Receiving objects: 100% (326/326), 46.61 KiB, done. 
Resolving deltas: 100% (227/227), completed with 87 local objects. 
From github.com:meteor/meteor 
* [new branch]  appconfig -> upstream/appconfig 
* [new branch]  check-path -> upstream/check-path 
    248ff08..4d44a4d ctl-migrate -> upstream/ctl-migrate 
    2c356d2..bfb8fd3 devel  -> upstream/devel 
* [new branch]  release-0.6.5 -> upstream/release-0.6.5 
    64b95a4..c0014df shark  -> upstream/shark 
From github.com:meteor/meteor 
* [new tag]   release/0.6.5-rc11 -> release/0.6.5-rc11 
* [new tag]   release/0.6.5-rc12 -> release/0.6.5-rc12 

如何獲取知道,如果沒有指定分支中獲得什麼?

而且,那爲什麼合併命令

$ git merge upstream/devel 

,但如果我想將更改發送到我的叉子,我需要說

$ git push origin devel 

爲什麼會出現在斜槓一個案例,但不是其他?

回答

2

git fetch upstream devel比同:

git fetch upstream refs/heads/devel 

你不要在你的Refspec提供一個目的地,所以獲取更新FETCH_HEAD,如「In git, how do I check out a remote repository's remote branches?」解釋。
這是一個短暫的參考,如果你做拉(取+合併)使用。

git fetch upstream獲取所有內容,因此沒有單個引用可以更新。


git merge必須指定合併的,在你的情況下,遠程分支develupstream/devel因爲上游是你的遠程更新的名稱,後取更新)
git merge devel將合併本地分支devel ......如果你已經在devel上,那會導致無操作。

git push也註明出處,這裏的本地分支devel,遠程目的地origin(以下簡稱「upstream repo」)和目標依賴於push policy
如果devel正在跟蹤遠程分支,並且您當前位於devel,則簡單的git push就足夠了。有關更多信息,請參閱「Why do I need to explicitly push a new branch?」。

+0

不是'git fetch upstream devel'更像'get fetch upstream refs/heads/devel'(注意*頭*)?遠程引用也應該在遠程名稱下,所以如果它是正確的引用,它將是'refs/remote/upstream/devel'。 – jszakmeister

+0

@jszakmeister true。我已經更新了答案。 – VonC

+0

+1感謝您的全面解釋和指引。我相信這對其他人也是有價值的,因爲到目前爲止,我只是隨機地輸入分支參數,並祈禱它正在做正確的事情:) –