'git merge'和'git fetch'有什麼區別? 我對這兩個命令有一些問題。 我不知道什麼時候應該使用其中一種。git merge和git fetch之間的區別?
回答
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)
注意,除了當地分行裁判(master
和branch1
)你有一個遠程分支引用(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)
(在某些情況下 - 只有其中一個分支包含不在其他變化 - 合併能通過「快進」來完成,但因爲每個分支有變化並不適用於此 - 即一級支流分歧此外還有另一個叫基礎重建有時可以用來分行結合的技術,但這是另一個可以。蠕蟲......)
所以這是fetch
和merge
之間的區別 - 非常不同的操作是做不同的事情。但我也提到了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
git fetch
將下載源代碼樹檢查更改,並且git merge
將您當前的分支與另一個分支加入。
- 1. 有什麼區別git fetch B + git merge B vs git merge origin/B
- 2. git pull --rebase,git rebase和git merge之間的區別
- 3. git分支:``git merge master``和``git pull origin master``之間的區別
- 4. git pull之間的區別。 master vs git merge master
- 5. git merge和github pull請求之間的區別
- 6. git merge --no-ff和git merge有什麼區別--squash
- 7. 'git fetch'和'git fetch --all'有什麼區別
- 8. git pull,git fetch和git rebase有什麼區別?
- 9. 'git remote update','git fetch'和'git pull'有什麼區別?
- 10. `git rebase foo bar`和`git checkout bar之間的區別; git rebase foo`?
- 11. git diff(git patch)和git push之間的區別
- 12. (git add -A後跟git commit)和git commit -a之間的區別?
- 13. git merge master vs git merge master coins有什麼區別
- 14. .git/info/exclude和.gitignore之間的區別
- 15. 什麼之間的區別〜^和Git中
- 16. git ignore和untrack之間的區別
- 17. Git和libgit2之間的區別
- 18. `git merge origin master`和`git merge origin/master`有什麼不同嗎?
- 19. `git remote prune`和`git branch -d -r`之間的區別
- 20. 'git svn rebase'和'git rebase trunk'之間的區別
- 21. git push origin和git push origin master之間的區別
- 22. git add和git commit之間的區別-a
- 23. git stash pop和git stash之間的區別適用
- 24. 在gerrit下git commit --amend和git rebase之間的區別
- 25. git add之間的區別。和git commit -am「message」
- 26. git push -f origin master和git push origin master之間的區別--force?
- 27. git pull和git請求拉之間的區別
- 28. git add之間的任何區別。和git add --all?
- 29. git pull和git pull之間的區別--rebase
- 30. 與上游同步叉:git fetch + git checkout + git merge與git checkout + git pull
'git fetch'使用自上一次提取以來已添加到服務器的提交更新本地存儲庫,而'git merge'將嘗試組合兩條並行的開發路徑。他們完全不同。你有沒有考慮閱讀git上的許多教程之一,或Pro Git書籍(免費提供[在線](https://git-scm.com/book/en/v2))? –