在開發一個功能的時候會反復的提交代碼,會造成一個功能有很多次提交,在我們要向master做分支合並的時候,就會出現很多commits,在合並以后同一個功能的commits就會很多,導致我們無法清晰的知道這個功能關聯的commit有哪些,這個squash就是優化我們的commits信息,讓我們的版本倉庫看起來簡潔明了,功能點一目了然:
使用比較簡單,比如我想將本地開發分支的內容合並到master主線分支上,並且期望將一個功能的所有提交壓縮成一個commit;
1. 先checkout master分支並做本地分支和遠程倉庫同步
git checkout master
git pull
(一定要做同步,若本地代碼和遠端倉庫不同步的話,就會出現很多遠端的修改進入我們的squash時的commits當中)
2. 切換到開發分支 dev , 並執行commits合並操作
git checkout dev
git rebase -i master
# 執行上面的語句后,會進入以下編輯界面
pick xxx: commit1 add : add xxx
pick xxx: commit2 fix: update xxxx
pick xxx: commit3 fix: delete xxx
pick xxx: commit4 modify : update xxxx
# 進入編輯模式,將除第一行的pick外,其余的pick都改成 squash ,退出編輯模式,保存即可
pick xxx: commit1 add : add xxx
squash xxx: commit2 fix: update xxxx
squash xxx: commit3 fix: delete xxx
squash xxx: commit4 modify : update xxxx
3. 以上操作順利的話,我們執行以下操作即可:
git push -f
注意:squash操作后你的提交信息就變成了一次提交,會記錄你之前的提交的描述信息,但是已經看不到相關的提交記錄了;
4. 看了資料以后,git 在merge的時候提供了這種squash merge的操作方式,未有實踐,這里也做個記錄:
git checkout master
git merge --squash dev
這樣可以在master節點上只看到一個提交,不管你在dev分支上有多少次提交
