Use Git Rebase to Avoid Dirty Commit History

Jayson Chiang
3 min readOct 20, 2021

當我們直接使用 git pull 的時侯,如果遠端有新的節點,我們當前分支也存在 commit 的節點時,那麼 git 會自動合併,並且在合併的地方自動產生 新的 commit :

Merge branch 'develop' of http://my-origin.com/project into develop

這個 commit message 不太好看,而且很多時侯意義不大。漂亮的作法是使用 git rebase,可以讓 source tree 看起來比較整齊乾淨。

$ git pull --rebase

首先,我們的主線是 develop ,先開一個新的分支,在分支中開發新功能。

$ git branch new-feature
$ git checkout new-feature

new-feature 編輯一段時間後,決定要合併回 develop

第一步: 先確認現在本機上的 develop是最新的版本。

$ git checkout develop
$ git pull --rebase

第二步:整理完之後回到 new-feature ,把 develop 合併到我們的支線上。

$ git checkout new-feature
$ git rebase master

第三步:如果有衝突的這,這邊需要手動解決衝突(如果一發不可收拾的時侯,可以使用 $ git rebase --abort ) 。如果一切順利,那就可以把分支合併回 develop

$ git checkout develop
$ git merge new-feature

第四步:現在應該可以在 develop 應該和 new-feature 完全相同的版本,就可以推送到遠端了

$ git push

有 2種情況非常不建議使用 git rebase

  1. 請勿對 已經 git push 的節點使用 git rebase ,因為 git rebase 會更新節點的參考(hash) 。好的作法是先在自己本地端先使用 git rebase 整理好程式碼,再 git push 到主線。
  2. 在主線上不要 git rebase 支線。好的作法是先在支線 git rebase 主線,然後 git checkout 回到主線後,再 git merge 支線 達到 fast-forward 的效果。

--

--