0%

在工作中學 Git:rebase -i 指令

上一篇說到 rebase 的用法,那就不得不繼續講 rebase -i 指令,學會這個指令的話就可以隨意地對 commit 進行各種修改與排列組合,是我心中的 git 神兵利器之一,以下就讓我談談我在開發時如何使用這個指令吧!

什麼是 rebase -i

rebase -i 的意思是互動式 rebase(git interactive rebase),當使用 rebase 這個指令的時候,後面加上一個 -i 的參數,git 就會打開一個介面(vim 編輯器),讓你知道有哪些 commit 會被複製下來,它也會告訴你這些 commit 的編號以及訊息。

rebase -i 常見的用途包括但不限於:

  • 調換 commit 的順序
  • 修改 commit 的訊息
  • 刪除一個 commit
  • 把數個 commit 合併在一起

指令

由於 rebase -i 會複製數個 commit,因此使用該指令時,需要指定一個起始的 commit 來決定編輯的範圍。注意,在指令中輸入的 commit 必須是起始點的前一個 commit

1
git rebase -i <commit編號>

那麼我們要如何知道 commit 的編號呢?可以使用 git log --oneline,就會出現 commit 歷史紀錄的列表,就能看到各個 commit 的編號以及訊息了。

合併數個 commit

下了上面這一段指令後,終端機就會出現一個操作介面(也就是 vim 編輯器),在介面中按 i 表示開始編輯,畫面中會出現被你選取的所有 commit,下方會有參數的說明。

以合併數個 commit 為例,第一個 commit 前面請使用 pick 參數,其他要合併的 commits 前面則使用 ssquash)參數。這樣一來,使用 s 的 commit 就會合併進入第一個 commit 中。

編輯完 commit 後按 esc → 輸入 :wq → 介面會問你要不要更動 commit 訊息,不修改的話可直接輸入 :wq

使用情境

我使用這個指令通常是為了讓同一個目的的 commit 整合在一起,避免線圖太亂。例如,我在分支上做了一些功能,但累積了很多瑣碎的 commit,此時我就會用 rebase -i 將所有 commit 合併為一個,之後才 rebase 上游分支、push 到遠端並發 PR。

參考資料


本篇文章只是簡單地介紹 rebase -i,並分享我平常如何使用它,但它還有很多豐富的用途是我沒有介紹到的,因此我很推薦大家可以延伸閱讀我所附的參考資料,會對這個指令的用法有更深入的了解哦!