我想弄清楚爲什麼rebase需要三路合併。舉例來說,如果我們有爲什麼git rebase需要3路合併?
A1 - A2
\
B1
而且我已經簽出B1,我想執行:
git rebase A2
爲什麼git的合併A2,B1和A1?爲什麼A2和B1不夠?我的意思是,不要將A2和B1作爲提交包含樹的完整當前快照?
我想弄清楚爲什麼rebase需要三路合併。舉例來說,如果我們有爲什麼git rebase需要3路合併?
A1 - A2
\
B1
而且我已經簽出B1,我想執行:
git rebase A2
爲什麼git的合併A2,B1和A1?爲什麼A2和B1不夠?我的意思是,不要將A2和B1作爲提交包含樹的完整當前快照?
要執行合併,Git需要找出自從共同祖先(A1
)以來在兩個分支中發生了什麼。正如你所說的,Git存儲提交/樹的快照以獲得實際更改集,它必須比較A2
到A1
和B1
到A1
,然後合併這些單獨的更改集。
同樣的事情發生在rebase中。要在B1
上應用變更集A2
,我們首先需要根據A1
和A2
之間的差異計算變更集。然後我們可以將其應用到B1
。你可以把rebase想象成類似於自動生成補丁文件的東西。首先它從舊分支生成所有這些補丁文件,然後將它們應用於當前的HEAD。因此,我們需要所有這三個提交來真正計算差異,因爲我們無法通過查看提交來找出提交中發生的情況。
謝謝你,這很有道理。 – worker1138 2011-12-14 23:32:45
謝謝你,那正是我試圖用我的問題展示的東西。 – worker1138 2011-12-14 23:21:05