4.1.4.rebase

1.Introduction

  • 由於branch與master分支的時間點不同, rebase是將branch的commit由舊的分支點移向新的分支點, 藉以讓master上上新的patch

  • 與merge不同的是: merge是直接在master上直接加一個commit, 而rebase是在master上面加上新的commit

  • 兩者的commit graph也不同

    • merge

    • rebase

2.Getting started

  • 1.git log

    • 取得當前分支上的所有commit

  • 2.git rebase -i HEAD~~

    • 將最新的以及次新的commit合併

    • 將第二行的pick改為squash

    • 編輯新的commit message

  • 3.git log

    • 合併成功

3.rebase的優缺點

  • 可讀性佳: rebase的resulting history是線性的, 而且不會有divergent branches

  • 導致錯誤

    • 當branch上所依賴的部分在master上被刪除了, 但是由於在rebase時並不會顯示出來, 因此rebase的執行並不會被中斷而導致一連串錯誤的commit, 這時候必須再加上一個新的commit來補救

    • 所以該如何避免在rebase時一連串錯誤的commit呢?

      • 1.在rebase完後測試code以確認是否有bug

      • 2.用Git merge取代之, 用一個commit處理所有的conflict, 可以history也可以描述何時合併, 合併時修改了哪些東西

Last updated