我開始使用git,並沒有完全理解錯綜複雜的情況。我的基本問題在於找出git pull
和git pull --rebase
之間的差異,因爲添加--rebase
選項似乎沒有什麼不同:只是拉一下。git pull和git pull之間的區別--rebase
請幫我理解差異。
我開始使用git,並沒有完全理解錯綜複雜的情況。我的基本問題在於找出git pull
和git pull --rebase
之間的差異,因爲添加--rebase
選項似乎沒有什麼不同:只是拉一下。git pull和git pull之間的區別--rebase
請幫我理解差異。
git pull
= git fetch
+ git merge
針對追蹤上游分支
git pull --rebase
= git fetch
+ git rebase
對跟蹤上游分支
如果你想知道如何git merge
和git rebase
不同,read this。
在沒有衝突
參見:
man git-pull
更確切地說,拉的git git的運行與給定的參數和 電話混帳合併獲取檢索到的分支頭合併到當前 分支。使用--rebase,它會運行git rebase而不是git merge。
參見:
When should I use git pull --rebase?
http://git-scm.com/book/en/Git-Branching-Rebasing
有時我們有一個上游,重新啓動/倒回我們依賴的分支。這可能是一個大問題 - 如果我們在下游,會給我們造成凌亂的衝突。
神奇的是
git pull --rebase
普通的Git拉是嚴格意義上,這樣的事情(我們將使用在所有這些例子中遠程叫起源和分支名爲foo):
# assume current checked out branch is "foo" git fetch origin git merge origin/foo
乍一看,你可能會認爲,一個git拉--rebase不只是這一點:
git fetch origin git rebase origin/foo
但是,如果上游底墊中任何涉及「squashin不會幫助g「(這意味着提交的patch-id更改,而不僅僅是它們的順序)。
這意味着git pull --rebase必須做的比這更多一點。以下是對它的作用和方式的解釋。
比方說,你的出發點是這樣的:
a---b---c---d---e (origin/foo) (also your local "foo")
時間的推移,你已經對自己的「foo」的基礎上增加一些提交:
a---b---c---d---e---p---q---r (foo)
同時,在一個合適的反社會憤怒,上游維護者不僅重新啓動了他的「foo」,甚至還使用了一兩個壁球。他的提交鏈現在看起來像這樣:
a---b+c---d+e---f (origin/foo)
git pull在這一點上會導致混亂。即使是一個git獲取; git rebase origin/foo不會削減它,因爲一方提交「b」和「c」,另一方提交「b + c」會衝突。 (並且與d,e和d + e類似)。
什麼
git pull --rebase
呢,在這種情況下,就是:git fetch origin git rebase --onto origin/foo e foo
這給了你:
a---b+c---d+e---f---p'---q'---r' (foo)
你可能仍然得到衝突,但他們會真正的衝突(在p/q/r和a/b + c/d + e/f之間),而不是由b/c與b + c衝突引起的衝突等。
取自(和稍微修改)
對於這種重要的是要理解合併衍合和之間的差。
Rebases是變化應該如何通過從層次結構向下的頂部 和合並是他們如何迴流向上。
我認爲你的答案提供了一個更簡單的解釋,在上面的其餘答案中並不明顯。謝謝。 –
歡迎來到@Aron C –
假設您在當地的分支機構兩次提交:
D---E master
/
A---B---C---F origin/master
後 「混帳拉」,將是:
D--------E
/ \
A---B---C---F----G master, origin/master
後「混帳pull --rebase「,則不會有合併點G.請注意,D和E會成爲不同的提交:
A---B---C---F---D'---E' master, origin/master
不是嗎A --- B --- C --- D'--- E' - F? – prgmrDev
相關:[我應該什麼時候使用git pull --rebase?](http://stackoverflow.com/q/2472254/456814)。 – 2014-05-16 20:26:47
[git pull VS git fetch git rebase]可能重複(http://stackoverflow.com/questions/3357122/git-pull-vs-git-fetch-git-rebase) –
有用的鏈接:https:// www。 atlassian.com/git/tutorials/rewriting-history/git-rebase –