2016-07-15 83 views
5

我可能沒有得到正確的東西,但任何人都可以向我解釋爲什麼git rebase導致衝突,而git merge(同一分支)不?Git:爲什麼rebase會導致衝突,而merge不會呢?

據我所知,git rebase在我當前分支提交之前提交了來自其他分支的提交,而git merge採用了相同的提交併將它們作爲補丁應用到我的分支,對吧? diff然後不一樣,雖然也許逆轉?不知道爲什麼用其他提交修補我的分支不是問題,而用我的提交修補另一個分支。

回答

3

在重新綁定期間,您將某個分支的所有提交應用於另一個分支。這些提交中的一個有可能在隨後的提交中解決了衝突。因此,合併操作不存在衝突,而轉換導致中間衝突。

另請參閱git rerere它允許您自動解決已經解決的衝突。

+0

我明白你在說什麼,但我還沒有完全掌握它。假設我的分支A已經提交了a,b和c。然後我創建分支B,提交d和e。提交f在分支A上進行。** Rebase **(在分支B上)將導致:a,b,c,f,d,e; **合併**會導致:a,b,c,d,e,f。現在如何提交f創建與提交c的合併衝突,如果它是首先在分支A上的提交c之上創建的? – minitauros

+0

@minitauros(1)合併會導致兩個分支被連接:一個與a,b,c,f和一個與a,b,c,d,e,不是線性歷史。 (2)如果在分支A上提交的提交F沒有引入衝突,那麼當重新分配時(如果有更詳細的示例,這將非常棒),我看不出它會如何引發衝突。 (3)但是,如果D與發生衝突的F和E修正衝突,則重新生成會重新發生衝突,而合併則不會。 – coredump

+1

好吧,那裏謝謝你的解釋!是否清除它一點。不幸的是,我現在還沒有這個例子(正如我已經修復過的那樣),但是如果我再次遇到它並且出現同樣的問題,我會用更多信息更新這篇文章:)。現在我認爲這個答案足夠好,謝謝! – minitauros

相關問題