Git Rebase

我們已經介紹了基本的合併策略,

  • 快進合併
  • 三向(遞迴)合併

在本教程中,我們將介紹git的一個最重要的特性 - rebasing (變基)。

什麼是rebase

rebase意味著你會更改分支提交的參考-祖先,或者換句話說,你正在將分支的祖先重置為你計劃合併的分支的最近提交,例如master分支。

讓我們看看具體的例子,

Git Feature Branch

圖中我們有masterFeature分支,雖然我們在Feature分支工作,但有些人繼續做會對master分支進行新的提交。

我們希望在將它們合併回master之前,將我們的分支提交的參考祖先重置為master的最新提交,當我們執行rebase命令後,它會更改我們的測試分支的祖先指向C3而不是之前的C1。下圖顯示了變基後發生的情況。

Git Feature Branch

當我們合併更改時,它只需要再次進行快進合併,因為分支是基於master的最新提交。這就是為什麼rebasing是git最強大的功能之一。

在你把變基後的Feature分支合併到master之後,提交日誌圖將會如下所示,

Git log graph after rebasing

看起來Feature分支好像從未存在過一樣,所有提交日誌都是在一條直線上。

Rebase工作流程

  • 建立新特性分支
    $ git checkout -b Feature
    
  • 修改並且提交新特性分支
    $ git add modified.txt
    $ git commit -m 'coment here'
    
  • 將新特性分支rebase`
    $ git rebase master
    
  • 合併編輯後的新特性分支到 master
    $ git checkout master
    $ git merge Feature
    

rebase黃金規則

rebase的黃金法則就是永遠不要對公共分支進行變基操作。

如果你對一個公共分支變基,但在此操作之後有人還在該分支上工作,那他們將很難將他們的分支合併到master上,因為他們仍然使用原始master分支作為他們工作分支的祖先。