Allen Wang

Allen Wang • 2023-09-21

Commit 整理 - git rebase interactive mode

vscode

前言

因為常用的 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

nono

需要先記一下的 vim 模式

看到的 commit 是越下面越新,可能會跟工具介面相反,這邊有點容易搞混

nono
  • 命令模式(預設) : 任意模式按下 Esc 就會回到這邊
    • i 進入插入模式,可以輸入文字
    • v 進入視覺模式
    • dd 可以剪下(刪除)整行
    • yy 可以複製整行
    • p 可以將剪下內容貼於鼠標之下
    • P 可以將剪下內容貼上鼠標之上
  • 插入模式 : 大致用於更改 pick 操作時使用
    • Esc 離開
  • 視覺模式 : 可以用滑鼠選取
    • 目前沒啥用,只想到可以用滑鼠選取整段複製

需要先記一下的 vim 指令操作

:q! : 不儲存,強制直接離開(有時候亂按搞砸了就下這個直接重來)

:wq : 儲存並離開

:{number} : 移動到指定行

修改 commit message

命令模式 i 進入插入模式
將目標的 pick 改成 r
:wq 儲存並退出
i 再進入插入模式輸入修改訊息
:wq 儲存並退出,搞定

nono
nono

修改 commit 順序

維持命令模式 dd 剪下
到對應的位置 p 貼上
:wq 儲存並退出,搞定

合併 commit

進入插入模式將目標的 pick 改成 f 或 s
:wq 儲存並退出

nono

f 直接將該 commit 直接合進前一個 commit,因此 message 會保持前一個的相同

s 也是向前一個 commit 合併,差在會多一步驟讓我們寫下新的 commit message

走 s 的話用 i 再進入插入模式輸入修改訊息

:wq 儲存並退出,搞定

結果會是這樣

nono

刪除 commit

維持命令模式 dd 剪下
:wq 儲存並退出,搞定

Getlens

上面提到有裝這個 extension,有提供易操作的介面可以做到一樣的事情,還可以有 drag and drop 來調 commit 順序,這點挺讚的,以下為開啟及操作方式

  • 先啟用 rebase 編輯器
nono
  • 在想要修改的地方右鍵點選
nono
  • 再選第二個選項就可以進入了
nono
  • 這樣就可以開始做操作了
nono

小結

整理 commit 是個好習慣且常常會需要使用到,看是從終端機或工具介面操作都 ok,記錄跟刻意練習一下之前一直不太熟用起來不順的部分

最近夥伴新增了文章留言功能,如果有幫助可以留個言試試 :D