Git 教程 - Rebase

Jinku Hu 2023年1月30日 2018年8月15日
  1. 什麼是 rebase
  2. Rebase 工作流程
  3. rebase 黃金規則
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 分支作為他們工作分支的祖先。

Author: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn