
Allen Wang • 2023-09-21
Commit 整理 - git rebase interactive mode

前言
因為常用的 git 指令就那幾個,遇到一些特殊情況時像是需要調整 commit 的時候常常忘記該怎麼操作,稍微刻意花點時間理解跟練習一下以下的操作,不然每次進到 vim 時都要抓同事來問 QQ
需要先知道的相關 git 指令
git log
: 列出 commit
git log --oneline
列出並簡化成一行 (只為了複製 SHA 就用這個)
git rebase -i <此 SHA 之後的 記住commit>
: 從哪裡開始進行 rebase,貼上的那個 commit 不包含,在之後的 commit 才可以編輯
以上都是在終端機操作,如果有裝 git graph 或是 source tree 這種視覺工具的話就可以直接找到對應的 commit SHA 來用
我自己是有裝這幾個 extension

需要先記一下的 vim 模式
看到的 commit 是越下面越新,可能會跟工具介面相反,這邊有點容易搞混

- 命令模式(預設) : 任意模式按下 Esc 就會回到這邊
- 按
i
進入插入模式,可以輸入文字 - 按
v
進入視覺模式 - 按
dd
可以剪下(刪除)整行 - 按
yy
可以複製整行 - 按
p
可以將剪下內容貼於鼠標之下 - 按
P
可以將剪下內容貼上鼠標之上
- 按
- 插入模式 : 大致用於更改 pick 操作時使用
- 按
Esc
離開
- 按
- 視覺模式 : 可以用滑鼠選取
- 目前沒啥用,只想到可以用滑鼠選取整段複製
需要先記一下的 vim 指令操作
:q!
: 不儲存,強制直接離開(有時候亂按搞砸了就下這個直接重來)
:wq
: 儲存並離開
:{number}
: 移動到指定行
修改 commit message
命令模式 i
進入插入模式
將目標的 pick 改成 r
:wq
儲存並退出
i
再進入插入模式輸入修改訊息
:wq
儲存並退出,搞定


修改 commit 順序
維持命令模式 dd
剪下
到對應的位置 p
貼上
:wq
儲存並退出,搞定
合併 commit
進入插入模式將目標的 pick 改成 f 或 s
:wq
儲存並退出

f 直接將該 commit 直接合進前一個 commit,因此 message 會保持前一個的相同
s 也是向前一個 commit 合併,差在會多一步驟讓我們寫下新的 commit message
走 s 的話用 i
再進入插入模式輸入修改訊息
:wq
儲存並退出,搞定
結果會是這樣

刪除 commit
維持命令模式 dd
剪下
:wq
儲存並退出,搞定
Getlens
上面提到有裝這個 extension,有提供易操作的介面可以做到一樣的事情,還可以有 drag and drop 來調 commit 順序,這點挺讚的,以下為開啟及操作方式
- 先啟用 rebase 編輯器

- 在想要修改的地方右鍵點選

- 再選第二個選項就可以進入了

- 這樣就可以開始做操作了

小結
整理 commit 是個好習慣且常常會需要使用到,看是從終端機或工具介面操作都 ok,記錄跟刻意練習一下之前一直不太熟用起來不順的部分
最近夥伴新增了文章留言功能,如果有幫助可以留個言試試 :D