最近在工作上遇到需要 Squash Commits 的情況,完全不懂「Squash Commits」是什麼的我,瘋狂查了一堆文章。雖然這些文章已經寫得很簡單易懂,也都有搭配圖片說明,但卻總是缺了一點小細節,讓我在操作時仍舊遇到困難。因此,我打算簡單整理一篇文章,記錄自己的操作步驟,也幫助其他人快速合併多個 Commits。
以下操作步驟是在 VS Code Terminal 中進行:
1. 查看提交歷史
|
|
假設我們需要將 feat: add cat 2 (c2336f7)
跟 feat: add cat 3 (9d13562)
合併進 feat: add cat 1 (e15527e)
。
📌 要離開 log 只要按一下鍵盤上的 q 即可
2. 開始合併
|
|
這裡的 HEAD~3
代表要合併從最近的 Commit (HEAD) 開始算起的前三個 Commits,也可以使用 Commit ID 直接指定要合併進的 Commit。
送出後就會進入編輯模式,內容如下:
|
|
📌 如果進到編輯模式後發現 rebase 錯了,可以按下 ESC 鍵,再輸入 :qa! 送出,離開並取消本次 rebase。
由於我們是要把 feat: add cat 2
跟 feat: add cat 3
合併進 feat: add cat 1
,所以把需要合併的 Commits 前面的 pick
改成 squash
或 s
。
|
|
📌 按一下鍵盤上的 a 可以進入編輯模式 (會看到出現 -- INSERT --)
編輯完後,按下 ESC
鍵,再輸入 :wq
送出。
3. 編輯 Commit 訊息
接著會再進入編輯模式,內容如下:
|
|
這是合併後的 Commit 訊息,可以將這三個 Commits 的訊息整合成一個,但個人覺得在這裡編輯 Commit 訊息很常失敗,所以我確認要合併的提交沒問題後,就會按下 ESC
鍵,輸入 :wq
送出。
4. 修改 Commit 訊息
|
|
再次查看提交歷史,可以看到 feat: add cat 2
跟 feat: add cat 3
已經被合併進 feat: add cat 1 (18aa49b)
,多餘的 Commits 也已經被移除。
這是我們修改一下訊息,使其更加完整:
|
|
5. 強制推送
|
|
如果你要推送的分支爲 protected 則無法強制推送 (也不建議)
其實我還不知道為什麼不能一般推送,它會需要 merge 我覺得很醜,所以我目前是強制推送。 如果有人知道更好的方式,請告訴我 ( ´•̥ω•̥` )