在使用 Git 作為版本控制的時候,我們可能會由于各種各樣的原因提交了許多臨時的 commit,而這些 commit 拼接起來才是完整的任務(wù)。那么我們?yōu)榱吮苊馓嗟?commit 而造成版本控制的混亂,通常我們推薦將這些 commit 合并成一個。
首先假設(shè)我們有3個 commit
git-log-origin.png
我們需要將 2dfbc7e8
和 c4e858b5
合并成一個 commit,那么我們輸入如下命令
git-rebase-i.png
其中,-i
的參數(shù)是不需要合并的 commit 的 hash 值,這里指的是第一條 commit, 接著我們就進入到 vi
的編輯模式
git-rebase-edit.png
可以看到其中分為兩個部分,上方未注釋的部分是填寫要執(zhí)行的指令,而下方注釋的部分則是指令的提示說明。指令部分中由前方的命令名稱、commit hash 和 commit message 組成。
當(dāng)前我們只要知道 pick
和 squash
這兩個命令即可。
-
pick
的意思是要會執(zhí)行這個 commit -
squash
的意思是這個 commit 會被合并到前一個commit
我們將 c4e858b5
這個 commit 前方的命令改成 squash
或 s
,然后輸入:wq
以保存并退出
git-rebase-squash.png
這是我們會看到 commit message 的編輯界面
git-rebase-commit-message.png
其中, 非注釋部分就是兩次的 commit message, 你要做的就是將這兩個修改成新的 commit message。
git-rebase-commit-message-combination.png
輸入wq
保存并推出, 再次輸入git log
查看 commit 歷史信息,你會發(fā)現(xiàn)這兩個 commit 已經(jīng)合并了。
git-rebase-log-new.png
注意事項:如果這個過程中有操作錯誤,可以使用 git rebase --abort
來撤銷修改,回到?jīng)]有開始操作合并之前的狀態(tài)。