2017-03-21 199 views
3

'git merge'和'git fetch'有什麼區別? 我對這兩個命令有一些問題。 我不知道什麼時候應該使用其中一種。git merge和git fetch之間的區別?

+1

'git fetch'使用自上一次提取以來已添加到服務器的提交更新本地存儲庫,而'git merge'將嘗試組合兩條並行的開發路徑。他們完全不同。你有沒有考慮閱讀git上的許多教程之一,或Pro Git書籍(免費提供[在線](https://git-scm.com/book/en/v2))? –

回答

2

UPDATE - 良好的悲傷,我的合併圖整個過程都是錯誤的。合併不動了「其他」分支的裁判......


git fetch是有關從遠程存儲庫檢索數據。

git merge是關於結合多行工作(通常是本地分行,但見下文)的工作。

git pull(我知道你並沒有問pull但我承擔)是從遠程像fetch檢索數據的速記,然後merge s轉換你的當前分支從遠程工作的相應行(如果有是「1」;「跟蹤信息」決定了這一點)。

例如,假設你有一個包含5個提交的單個分支(master)的遠程倉庫。

'origin' repo 

A --- B --- C --- D --- E <--(master) 

前一陣子你已經克隆了這個回購;當時只有第一次提交(A)在其中。然後創建了一個新分支(branch1)並做了一些工作,在該分支上創建了一個新的提交(L)。最後,你已經從遙控器中取得了變化;更多關於稍後的工作方式,但現在讓我們假設您更新了master以包含B

local repo 

A --- B <--(master)(origin/master) 
\ 
    L <-- (branch1) 

注意,除了當地分行裁判(masterbranch1)你有一個遠程分支引用(origin/master)中,現在,恰好是同master

現在,如果你想更新你的本地倉庫包含從原點的所有數據,但不合並任何,你會說

git fetch 

,然後你必須

 C --- D --- E <--(origin/master) 
    /
A --- B <--(master) 
\ 
    L <-- (branch1) 

這是一個獲取 - 只需從遠程獲取數據。

您明確要求merge的主要原因是將您的工作從branch1與您的master合併。所以

git checkout master 
git merge branch1 

(然後可能解決任何衝突),你現在有

 C --- D --- E <--(origin/master) 
    /
A --- B --- M <--(master) 
\  /
    L ------- <--(branch1) 

(在某些情況下 - 只有其中一個分支包含不在其他變化 - 合併能通過「快進」來完成,但因爲每個分支有變化並不適用於此 - 即一級支流分歧此外還有另一個叫基礎重建有時可以用來分行結合的技術,但這是另一個可以。蠕蟲......)

所以這是fetchmerge之間的區別 - 非常不同的操作是做不同的事情。但我也提到了pull這兩種結合的方式。如果您執行pull,則首先從遠程獲取更改(如果尚未完全更新,則使用fetch),然後如果當前分支具有相應的遠程分支,則會合並它們。

# still on master 
git pull 

給出類似

 C --- D --- E --- N <--(master)(origin/master) 
    /    /
A --- B --------------- M 
\     /
    L ------------------- <--(branch1) 

(請注意,雖然我通常畫這些圖使得「直線」進入合併爲「第一父」,在這種情況下對於N變得麻煩;但是這確實顯示了一般的提交拓撲...)

當我談論「拉動更改」以獲得B到您的本地代表o,它可能已經完成使用git pull

1

git fetch將下載源代碼樹檢查更改,並且git merge將您當前的分支與另一個分支加入。

相關問題