寫在前邊
寫這篇文章主要是記錄下,很久之前讀《重構-改善既有代碼的設計》時,看到過作者講過Git可以實現多個細碎操作commit合並為一個有意義的提交,當時查過一些中文信息,寫得不是很清晰。正巧有一個Git管理的腳本倉庫需要大量修改,嘗試踐行下書中的內容:完成一小部分功能就作一次本地commit,直到完成修改后,合並成一個有意義的提交。
這樣做是有意義的,每一次小小的commit保證了工作進度不會因頻繁的檢查而效率低下(每一次提交之前仔細檢查,提交后就無需再重復檢查了,也有助於提升重構者的信心)。
實驗准備
試驗倉庫中本地提交了5次,領先遠端倉庫。我們的目的是將這5次提交合並成一個commit,並且修改最終的提交信息。
git log --pretty
合並多個commit
Git 命令:
git rebase -i HEAD~5
- 上邊的數字5即合並的版本,之前看到提交信息
構建調整1~5
這五個提交。- Git 沒有一個改變歷史工具,但是可以使用變基來變基一系列提交,本文的合並請求就是用變基實現的。
下圖中是已經修改后的,之前這5次提交的前邊都是pick,構建調整1
信息我修改成了一個有意義的提交,為了驗證是否能同時合並commit與修改合並后的提交信息。
按照默認順序,可以將除第一個提交外,都使用
fixup
或squash
進行標記,最終你將得到這些commit向上合並,最終變成一個,提交信息是pick
標記的信息。
這里只關注 pick
、squash
、fixup
這三個命令:
pick
:使用此提交不做操作squash
:將指定的提交合並到上邊的pick請求中,保留提交信息fixup
:與squash
類似,但不保留提交信息
保留提交信息是指將最終合並的提交信息包含所合並提交信息,我做了嘗試如圖:
使用 :wq
保存修改后
使用 git log --pretty
查看提交日志,可以看到commit已合並成了一個新的請示,但提交信息是 pick
標記的 commit 提交信息,說明pick標記的提交信息無法修改。
合並多個請求的目標已經完成,接下來修改提交說明。
修改最后一次提交說明
Git 命令:
git commit --amend
執行命令,修改提交信息后,:wq
保存退出。
git log --pretty
查看提交日志
提交信息已經更新,上一步驟的合並多請求也已完成,推送到遠端倉庫就可以了。
結尾
通過本文的描述實踐了合並多個commit並修改提交信息,感覺這個功能很好用,作為有一定代碼潔癖的我,對提交日志也有一定潔癖,畢竟后續日子提交日志可以幫我們快速定位過去的修改。
另外 git rebase
命令給了 edit
與 reword
本身也是調用了 git commit --amend
修改的提交信息。為了表示 pick
標記的提交信息不會修改,才做的驗證。
參考
-END-
本文同步於本人CSDN