實際的開發過程,有些人會寫一點 code 就 commit,而 log message 通常是先隨便寫一下,自己看得懂就好,然後寫完一個特性功能之後,要push 出去給別人 Code Review 之前,為了讓 Code Review 的人容易看得懂自己在做什麼樣的修改,最好要整理一下該分支的歷史,就像寫文章要有起承轉合一樣。這種情況,就會用到「強制 Rebase」。
通常會有幾個整理原則:
保留目前的 commit
最好先在目前分支所在的的 commit 上做一個暫時的分支(名字隨便取,例如:「keep」),主要是先留保它,等到 Rebase 結束後,被用來比較是否有修改內容在 Rebase 過程中不小心被遺失掉,當然啦!如果本來就有其它 refs 在這個 commit 上,就請省略這個步驟。
在想要修改的 commit 的前一個 commit(base) 上開啟 rebase 視窗。(可以這麼記: base 是根基,所以 base 本身是不被修改的)
List 是空的,開啟 Force Rebase。
(為什麼是空的?因為原來的 Rebase 是用來將一個分支上的修改,轉移到另一個分支之上。所以正常情況下自己是無法轉移到自己身上的。)
會列出目前分支所在的 commit 到 base 之間的 commits(注意:並不包含做為 base 的那個 commit)
修改「REBASE」欄位的操作
然後按下 Start Rebase。
來到第一個 REBASE 操作是 Edit 的 commit 會暫停下來
先勾選 Edit/Split commit,然後按下 Amend。
(如果只是想編輯 Commit Message,就不需要勾選 Edit/Split commit,而直接修改 Commit Message 頁籤裡的內容即可)
按下 Amend 後會出現 Commit 視窗,讓你 Amend 這個 commit 的內容
例如使用 TortoiseGitMerge 檢視並修改內容
一切 OK 後,回到 Commit 視窗按 OK。
回到 Rebase 視窗時,會詢問要不要另外加一個 commit
這個功能是用來再插入一個 commit 用的;如果沒有要插入一個新的 commit 就按 No 繼續 Rebase。
對 Edit 選項的 commit 重覆步驟 6. ~ 11.
最後完工按 Done。
最好比較一下 Rebase 前後的結果是不是有遺失修改。