前言

開發中可能會有許多不必要的commit點,
當然在commit前就要先謹慎的commit,不要隨便commit,
這邊舉例來說,
在剛開始的時候都會忍不住改一個東西就commit一次,
像是 修改錯字之類的,這樣的commit就有點多餘。

使用rebase的情況是,commit點還沒push到origin的時候。


使用rebase整理commit紀錄

今天可能會有個commit紀錄像這樣

情境舉例示範
假設分支名稱為 test

情境一: 保留程式,但移除commit訊息。

假設我們要保留 修改錯字 的程式,但不要commit紀錄

Step 1 : 查詢commit log紀錄

1
git log --oneline test

可能查出的結果如下:

1addcb3 (HEAD -> test) 新增功能
ada36ba 修改錯字
ffe3ke1 測試
gg34e67 測試還原程式
bb389s1 新增分類


Step 2 : 使用rebase

先確保當前分支在 test

1
git rebase -i HEAD~2

HEAD~2 = 取最新的前兩筆

這時候會出現:

1
2
pick 1addcb3 新增功能
pick ada36ba 修改錯字

先按下 i (terminal編輯鍵)
terminal最下面會顯示-- INSERT --
代表可以輸入文字


Step 3 : pick 改為 squash

將上面的內容改成:

1
2
pick 1addcb3 新增功能
squash ada36ba 修改錯字

按下esc 代表退出編輯模式
再按鍵盤輸入 :wq

:wq(保存退出)

接著會進入commit內容的編輯vim
一樣按 i 編輯後 > esc 退出編輯模式 > 輸入 :wq
這樣就完成修改commit紀錄了

可以看到最後結果
修改錯字 的程式被合併到 新增功能 的commit點
但是修改錯字的commit點消失了


情境二:移除commit點,並移除程式

Step 1 : 查詢git log

1
git log --oneline test

一樣假設查出的樣子如下,我們要移除 測試 & 測試還原程式 的commit點

1addcb3 (HEAD -> test) 新增功能
ada36ba 修改錯字
ffe3ke1 測試
gg34e67 測試還原程式
bb389s1 新增分類


Step 2 : rebase

取前四筆

1
git rebase -i HEAD~4

會出現:

1
2
3
4
pick 1addcb3 新增功能
pick ada36ba 修改錯字
pick ffe3ke1 測試
pick gg34e67 測試還原程式

Step 3 : pick改為drop

1
2
3
4
pick 1addcb3 新增功能
pick ada36ba 修改錯字
drop ffe3ke1 測試
drop gg34e67 測試還原程式

terminal 編輯儲存的步驟可以複習情境一

這樣 測試 與 測試還原程式,這兩個commit點+程式 就會消失了


結論

重新複習一次
git rebase 的用法:

  1. 不要commit訊息紀錄,但是 要保留 程式碼

    pick –改為–> squash

  2. 不要commit訊息紀錄,也 不要保留 程式碼:

    pick –改為–> drop

如果commit已經被推到origin,不建議使用drop,建議使用revert,以免影響其他人。