GIT:將本地分支的多次提交合並為一個commit到遠程倉庫


應用場景

當一個功能模塊比較龐大時,本地工作區在開發中可能進行了多次 commit / merge 操作,這時本地版本庫的工作樹是混亂不堪的。

如果將混亂的工作樹維持原狀提交至遠程分支,當我們只需要提前發布該部分的代碼時,就要在 master 遠程分支中不斷地 pick + rebase 操作,產生不小的額外工作量,還有可能在 rebase 中丟失代碼。

於是我們在開發完一個完整的模塊后,應該將本地版本庫中存在多次 commit 的工作樹合並為一次 commit,再提交至遠程倉庫。

合並工作樹中的commit

假設當前開發完成的功能模塊有3次commit提交,我們需要將這個完整的模塊推送至遠程倉庫,首先需要將這 3 次 commit 進行合並操作

取這 3 次 commit 的上一個 commit ID 執行 rebase 操作

進入操作面板,可見 Rebase 排序是由倒序排列的,我們可以用 squash (縮寫 s ) 將每次 commit 合並至前一個 commit

鍵入i,將需要合並的 commit 前的 pick 操作 改為 squash

squash 做的事就是把每次 commit 合並到更早的一次 commit,因此最早的分支應該是 pick 操作,因為在這次 Rebase 中它是最早的一次 commit

如果是 squash 將會報錯,如下:

修改后鍵入 :wq 保存退出,假若報錯:

用自己習慣的方式解決此次本地沖突,解決所有沖突之后git status查看:

按提示git rebase --continue:

如果rebase操作沒有代碼沖突保存退出后直接進入日志面板:

仍然是鍵入 i 進入編輯模式,將三次 commit 的工作樹日志合並:

編輯完成后鍵入 :wq 保存退出回到主面板:

使用 git log 查看是否合並成功:

可以看到 rebase 操作后的 3 次 commit 已經合並為一次 commit,並更換了 commit ID

這時就可以 push 到遠程倉庫了,假設之前的三次 commit 已經有進行過 push 操作,那么此次 push 會被檢測到本地工作樹與遠程倉庫的工作樹相異而報錯,

此時可以使用 --force 將本地版本庫強制覆蓋至遠程倉庫:

- END -


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM