2014-08-30 54 views
2

我是新來的混帳,我一直在關注這個tutorial「遠程」本地分支上的重新分配大師如何工作?

我認爲我理解它的大部分內容,直到我到了遠程存儲庫。關於遠程倉庫的唯一概念是我理解的是git fetch和git remote。根據該教程,git fetch通過git remote的add選項從指定的URL獲取遠程存儲庫。它將存儲庫下載到「遠程」分支。如果我理解正確,它不是遠程存儲庫中的分支,而是從遠程存儲庫下載的分支。它不是我的本地存儲庫的一部分,它仍然在那裏合併/重新裝入它(我的本地存儲庫)。也許我錯了,我在這裏錯過了一些東西,請隨時糾正我。

現在,我覺得我根本不明白的是,git如何設法將「遠程」存儲庫重新綁定到本地存儲庫中。

我明白,當我重新綁定一個分支時,它會將該分支中的提交以不同的提交爲基礎進行分支。我仍然需要將分支合併到我的主分支中。我做什麼時會發生什麼?

git checkout master 
git fetch origin 
git rebase origin/master 

這不會將我的本地主分支重定位到遠程主分支嗎?我一直在想這個picture

而不是功能我會有我的本地主分支,而不是主,我會有遠程原點/主分支。除了師父並沒有真正分出出身/主人。

這不會刪除我的本地分支主嗎?這不會將我所有的工作都轉移到「遠程」存儲庫嗎?另外,在推送到真正的遠程存儲庫之前,我不需要合併它們。

+1

你有其他的方法。 'git rebase origin/master'將你的提交放在'origin/master'之上。 – jcm 2014-08-30 02:56:37

+0

你的意思是說,它將origin/master複製到我的本地主分支中,然後添加新的提交? – MinusFour 2014-08-30 03:27:52

+0

就是這樣的。您可能已經看到了它們,但是我發現[官方文檔](ftp://www.kernel.org/pub/software/scm/git/docs/git-rebase.html)有幫助。 – jcm 2014-08-30 03:53:41

回答

6

這裏的關鍵是,底墊,像git的最其他分支相關的項目,真正起作用關閉提交圖形而不是分支名稱。分支名稱用於一個或兩個目的:

  • 定位犯下圖內提交,
  • 僅在適用的:,使其指向正確的提交移動分公司

所以,如果你運行:

git checkout master 
git fetch origin 
git rebase origin/master 

的第一步讓你「分支主」:它只是將masterHEAD (當然更新你的工作樹)。

第二步從origin獲取您還沒有的任何提交。這些將進入您的存儲庫,增加提交,並更新origin/master以指向最新的提交。例如,你可能有過這樣的fetch前:

  * - * <-- HEAD=master 
     /
..- o - o   <-- origin/master 

一旦fetch完成後,你的混帳博格增加了origin的生物技術的獨特性,以自己的,你現在有:

  * - * <-- HEAD=master 
     /
..- o - o - o  <-- origin/master 

在這一點上,你可以git rebase你的兩個提交(填寫* s)到新的origin/master的小費。這實際上是通過副本提交你的提交:你得到兩個新的,與舊的一樣,但有不同的父母ID:他們鏈接了新的提示origin/master,而不是關閉舊的(pre- fetch)小費。製作副本後,git rebase會調整您的分支master以指向新的提示最多的提交。

(而且,在與博格主題保持一致,你原來提交的仍然在你的倉庫。他們最終會被默認丟棄,一旦引用日誌條目到期,30天)。


這裏的例外只是分支名稱的事情。例如,您可以使一個分支成爲另一個分支的間接引用。但通常只有HEAD。或者,您可以重新命名一個分支,這與它指向的地方沒有任何關係。

更確切地說,它將ref: refs/heads/master寫入.git/HEAD。這就是「在分支上」所需要的:分支的全名在該文件中加上「ref:(space)」前綴。

+0

+1,部分用於注意分支和提交之間的區別,部分用於漂亮的ASCII提交圖,主要用於git同化 – 2014-08-30 02:45:12

+0

謝謝您的解釋!你能否詳細說明:「在完成副本之後,git rebase會調整你的分支主控以指向新的提示最多的提交。」轉型後,本地分支機構沒有任何東西?提交不是提交到新提取的origin/master的提示嗎? – MinusFour 2014-08-30 03:11:57

+0

@MinusFour:你可能會看看我的一些其他答案,例如,http://stackoverflow.com/a/25222144/1256452,在那裏我顯示舊的「已放棄」提交仍在回購中,並且只要你可以找到一種方法來命名它們。另外,在我談論分支如何「自動前進」時尋找答案,例如http://stackoverflow.com/a/21055585/1256452 ...在這種情況下,您不是「在」origin/master「 (你不能),所以它*不*移動。 – torek 2014-08-30 03:27:32

相關問題