【學了就忘】Git操作 — 62.rebase命令執行原理

如圖所示,masterdev分支都以提交節點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

會直接將原來的提交節點CD,應用到新基準點B後,相當於沒有發生變化,這個變基的過程爲:

1)首先,將基準點和test分支指向改變爲節點B,並將test分支上基準點往後的提交節點作爲補丁。

如下圖:

2)然後,按順序將補丁CD提交節點,應用到新基準點B後面。

如下圖:

3)最後,test分支的狀態。

所以,直接執行git rebase 3ccc8命令,歷史提交記錄不會有任何變化,但是CD提交的commit-id會有變化。

記住:基準點之後的提交會變基,不包括基準點。

參考:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章