如何在 push 前整理歷史(使用強制 Rebase)

強制 Rebase 的使用場合

實際的開發過程,有些人會寫一點 code 就 commit,而 log message 通常是先隨便寫一下,自己看得懂就好,然後寫完一個特性功能之後,要push 出去給別人 Code Review 之前,為了讓 Code Review 的人容易看得懂自己在做什麼樣的修改,最好要整理一下該分支的歷史,就像寫文章要有起承轉合一樣。這種情況,就會用到「強制 Rebase」。

通常會有幾個整理原則:

  1. 「移動檔案」或「重新命名」,請用一個 commit 不要有任何檔案修改,方便以後追查 log 歷史時,使用 Follow Rename 會比較順。
  2. 單純地「移動程式碼」就給一個 commit
    區別出移動和真正修改,讓查看 log 歷史的人可以清楚地知道哪些 commit 才是重點
  3. 套用 Coding Style 也請給一個獨立的 commit

範例:

  1. 保留目前的 commit
    最好先在目前分支所在的的 commit 上做一個暫時的分支(名字隨便取,例如:「keep」),主要是先留保它,等到 Rebase 結束後,被用來比較是否有修改內容在 Rebase 過程中不小心被遺失掉,當然啦!如果本來就有其它 refs 在這個 commit 上,就請省略這個步驟。

  2. 在想要修改的 commit 的前一個 commit(base) 上開啟 rebase 視窗。(可以這麼記: base 是根基,所以 base 本身是不被修改的)

  3. List 是空的,開啟 Force Rebase。
    (為什麼是空的?因為原來的 Rebase 是用來將一個分支上的修改,轉移到另一個分支之上。所以正常情況下自己是無法轉移到自己身上的。)

  4. 會列出目前分支所在的 commit 到 base 之間的 commits(注意:並不包含做為 base 的那個 commit)

  5. 修改「REBASE」欄位的操作

    • 想要修改的用 Edit
    • 不想要的用 Skip
    • 想要二個以上的 commits 壓縮成一個的,則用 Squash(注意:Squash 是向下一個 commit 做壓縮)
    • 用 Up、Down 按鈕來調整 commit 之間的順序
    • 用 Shift + Up/Down 將 commit 置頂/置底


    然後按下 Start Rebase。

  6. 來到第一個 REBASE 操作是 Edit 的 commit 會暫停下來

  7. 先勾選 Edit/Split commit,然後按下 Amend。

    (如果只是想編輯 Commit Message,就不需要勾選 Edit/Split commit,而直接修改 Commit Message 頁籤裡的內容即可)

  8. 按下 Amend 後會出現 Commit 視窗,讓你 Amend 這個 commit 的內容

  9. 例如使用 TortoiseGitMerge 檢視並修改內容

  10. 一切 OK 後,回到 Commit 視窗按 OK。

  11. 回到 Rebase 視窗時,會詢問要不要另外加一個 commit

    這個功能是用來再插入一個 commit 用的;如果沒有要插入一個新的 commit 就按 No 繼續 Rebase。

  12. 對 Edit 選項的 commit 重覆步驟 6. ~ 11.

  13. 最後完工按 Done。

  14. 最好比較一下 Rebase 前後的結果是不是有遺失修改。

重點複習:

  1. 在想要修改的 commit 的前一個 commit(base) 啟動 Rebase 功能。
  2. REBASE 操作使用 Edit。
  3. Rebase 到該 commit 時,勾選 Edit/Split commit 再按 Amend 以修改它。

results for ""

    No results matching ""