1. 程式人生 > 其它 >GIT:將本地分支的多次提交合併為一個commit到遠端倉庫

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 儲存退出,進入日誌面板:

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

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

使用 git log 檢視是否合併成功:

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

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

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

- END -