2010-08-12 235 views
5

因此,昨天我發佈了一個question關於一些奇怪的衝突,當我試圖將上游分支重新綁定到我的本地主題分支。'git rebase`衝突

最後我用了git rebase --merge upstream,並解決了自從上一次rebase以來沒有碰過的文件中的很多衝突。

在這種情況下,我對rebase的理解是,它將我的提交從該主題分支中分離出來,應用來自上游分支的提交,然後在我的提交之上應用(作爲補丁)。所以,它最終是一個快速前進的操作。我不明白的是......爲什麼我會將衝突與來自上游的犯罪相結合。這些也是作爲補丁應用嗎?我以爲只是...在同一分支上一次提交之前「焊接」了一些提交的行爲?

我在問這個,因爲我有很多衝突文件我沒有碰過。噢,我每天都會對這個上游分支進行重組。

UPDATE

我剛剛注意到,一些從上游帶來的將自己的主題分公司提交的有他們的SHA-1 ID改變。有誰知道可能會導致Git做到這一點?難道是--merge開關?

我的git版本是1.5.6.5

+0

你有某種類似於http://stackoverflow.com/questions/1042207/git-svn-rebase-fails的自動轉換嗎? – VonC 2010-08-12 08:45:18

+0

@VonC'core.autocrlf'是空白的,我假設其默認值爲「input」。這是因爲這個原因嗎?我不知道現在如何重現此問題,以確定將其設置爲false會產生什麼影響。 – 2010-08-12 08:52:58

+0

ţ:確保將其設置爲false。 – VonC 2010-08-12 09:11:25

回答

2

重新編寫歷史記錄。如果你重新提交已經被推送到遙控器的提交,你正在進入一個受到傷害的世界。更糟糕的是,如果你繼續像這樣改版。 Rebase有它的優勢時間,但它是一個專業工具IMO,而不是休閒工具,像合併。

然後應用(作爲補丁)我的提交在這些之上。

是,新提交

所以,它最終是一個快進操作

號快進被簡單地移動指針HEAD科。您正在從遠程引入新對象,然後在其上應用修補程序。

如果你的本地和遠程上次同步在A1,說你添加的(本地)A2A3提交,發現遙控又增加了B1B2,重訂基期將藏匿A2A3,拉下B1B2(應該是快進,因爲他們都有一個共同的後代A1),然後再應用補丁A2A3新提交(因此新的SHA-1)A2'A3'

所以現在你的本地歷史是: A1 - B1 - B2 - A2' - A3' 這不是一個快進。

+1

我知道rebase的危險,而且我沒有使用這樣的rebase。不過由於某些原因,當我發佈這個問題時,我對文件沒有感到奇怪的衝突。衆所周知,Rebase產生的衝突少於合併,但當時對我而言,它並沒有那樣的表現。因此我的問題。我沒有找到原因,但沒有重現它。 – 2011-01-08 16:31:54