如圖所示,master
和dev
分支都以提交節點A
爲基準點:
如果dev
分支想要變換A
這個基準點,那麼:
第一步:切換到dev
分支上;(想要變基哪個分支,就切換到哪個分支上執行git rebase
命令)
第二步:執行git rebase master
;(master
就代表變基的目標分支)
說明:上述命令中rebase
參數後面指定的分支,就是變更後的基準點,如上例子中的master
分支:
- 如果是分支,如
master
,基準點爲該分支的最新提交節點,也就是C
; - 如果是一個
commit_id
,基準點爲該commit_id
對應的提交節點;
(1)以分支爲基準點示例
沿用以上模型,查看項目的歷史提交記錄,如下圖:
1)首先,將dev
分支上除了基準點A
外的所有節點複製一份,即D'
和E'
,作爲補丁備用,並將分支dev
指向新基準點C
。
如下圖:
2)然後,按原來dev
上的節點順序(D -> E
)將補丁應用(Patch Applying
)到新基準點C
後面,並同時改變分支dev
指向。
如下圖:追加補丁D'
每次向新基準點應用補丁時,都會出現三個選項:
說明:
@1.git rebase --continue
該選項表示:解決了合併衝突後,繼續應用剩餘補丁E'
,如下圖:
@2.git rebase --skip
該選項表示:跳過當前補丁,繼續應用下一個補丁:
如果一直執行該選項,直到應用完分支dev
上剩餘的補丁,結束git rebase
命令後,兩分支的狀態爲:
git rebase --abort
該選項表示:終止rebase
操作,回到執行rebase
指令前的狀態:
(2)以提交爲基準點示例
如圖下所示,若將提交節點B
作爲基準點,在當前正在工作的分支爲test
:
執行命令:git rebase 3ccc8
。
會直接將原來的提交節點C
和D
,應用到新基準點B
後,相當於沒有發生變化,這個變基的過程爲:
1)首先,將基準點和test
分支指向改變爲節點B
,並將test
分支上基準點往後的提交節點作爲補丁。
如下圖:
2)然後,按順序將補丁C
和D
提交節點,應用到新基準點B
後面。
如下圖:
3)最後,test
分支的狀態。
所以,直接執行git rebase 3ccc8
命令,歷史提交記錄不會有任何變化,但是C
和D
提交的commit-id會有變化。
記住:基準點之後的提交會變基,不包括基準點。
參考: