上一篇說到 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 前面則使用 s
(squash
)參數。這樣一來,使用 s
的 commit 就會合併進入第一個 commit 中。
編輯完 commit 後按 esc
→ 輸入 :wq
→ 介面會問你要不要更動 commit 訊息,不修改的話可直接輸入 :wq
。
使用情境
我使用這個指令通常是為了讓同一個目的的 commit 整合在一起,避免線圖太亂。例如,我在分支上做了一些功能,但累積了很多瑣碎的 commit,此時我就會用 rebase -i
將所有 commit
合併為一個,之後才 rebase
上游分支、push 到遠端並發 PR。
參考資料
本篇文章只是簡單地介紹 rebase -i
,並分享我平常如何使用它,但它還有很多豐富的用途是我沒有介紹到的,因此我很推薦大家可以延伸閱讀我所附的參考資料,會對這個指令的用法有更深入的了解哦!