2016-03-09 45 views
1

我讀this並在大多數情況下,我得到它。我想我明白rebasing(它獲得更線性的git日誌歷史記錄,而不必進行只是三方提交的提交),我也認爲我理解git圖。但是在我不明白的段落中有幾句話。快進和變基的混帳

您會注意到該合併中的短語「fast-forward」。因爲您合併的分支指向的 提交是直接 上游您正在進行的提交,Git只是將指針向前移動。以另外一種方式,當您嘗試合併一個承諾 與提交,可以通過以下達到短語第一次提交的 歷史,Git會向前移動指針,因爲 沒有發散的工作合併到一起,簡化的東西 - 這是稱爲 「快進」。

您的更改現在位於主分支指向的提交的快照中,您可以部署該修補程序。

我不明白的是上游,指針和最後一句話。

在該圖中,爲什麼是紅色主框上方的修補程序?

+0

上游分支:http://stackoverflow.com/a/6244487/6309 – VonC

+0

請評論我的回答如果需要編輯或標記爲接受。 –

回答

3

上游

GIT中的一個重要的方面是,它是分佈式的,並且被分佈在很大程度上意味着有在系統中沒有固有的「上行流」或「下行流」。這僅僅意味着沒有絕對的上游回購或下游回購。

這些概念是總有兩個回購之間的相對並依賴於雙向數據流:

如果「myLocalRepo」宣佈「companyRepo」作爲遠程一個,那麼:

要從上游拉「 companyRepo「(」 companyRepo「是‘上游從你’,你是」爲companyRepo下游「)。 你是推到上游(「companyRepo」仍然是‘上游’,其中的信息現在可以追溯到)。 注意「from」和「for」:你不只是「下游」,你是「下游/ for」,因此是相對的方面。

指針

它實際上具有相同的含義,因爲它在計算機編程。指針是存儲器中地址的指示符。

在Git世界中,許多實現實際上是用Pointers的概念建模和開發的。

例如,作爲實際指針的HEAD始終指向您檢出的當前分支上的最後一個提交。這同樣適用於tagsreflog的結果。

在該圖中,爲什麼是紅色主框上方的修補程序?

讓我們只專注於解釋爲fast-forward

當您嘗試合併一個帶有提交提交,可以通過下面的第一次提交的歷史可以達到,Git會通過移動指針簡化的東西前鋒因爲沒有發散的工作合併到一起 - 這就是所謂的「快進」。

的圖和解釋試圖解釋的是,當你創建一個新的分支,你有所有最後一個分支的提交歷史。現在你繼續在新分支上工作,例如做3個新的提交。當與最後一個分支合併時,git不必將所有新分支提交歷史都複製回來。相反,它只需複製三個新的提交併將指針移動三個提交以完成合並。這被稱爲快速強制機制。

master紅色框包含所有的歷史最高時創建的hotfix新分支的時刻。現在,當合併發生時,主服務器和修補程序都指向相同的提交。

主紅色框實際上在時間上比修補程序,併爲hotfix分支創建一個基準點以上。

+0

那麼爲什麼紅色的主箱子會在圖表中的修補程序之上,如果它比較老,我會鏈接到該修補程序? – Jwan622

+1

我提到我的回答的最後兩段的原因。首先是因爲它在時間上較舊的(上述手段以上),其次是因爲修補程序是一種用於主的孩子,因爲師傅被越早創建和修補程序有隻是一些方面投入的,在合併之前。請注意,該圖顯示了合併完成後的狀態 –