Use Git Rebase to Avoid Dirty Commit History
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
- 請勿對 已經
git push
的節點使用git rebase
,因為git rebase
會更新節點的參考(hash) 。好的作法是先在自己本地端先使用git rebase
整理好程式碼,再git push
到主線。 - 在主線上不要
git rebase 支線
。好的作法是先在支線git rebase 主線
,然後git checkout
回到主線後,再git merge 支線
達到 fast-forward 的效果。