轉載:https://blog.csdn.net/qq_35008279/article/details/86316819
- git log 檢視目前狀态
可以看到我目前狀态有四個送出,最初的送出 + 三次送出。現在想用git revert回退這三次送出,但是我們知道git revert是用一次新的送出回退之前的送出,是以我回退三次,就會有三個新的送出,但是我又想隻增加一個新的送出,繼續看。
- git revert回退依次三個送出
可以看到執行完三次回退後,又新增了三次送出,現在想将這三次送出合并成一個。
-
git rebase合并多次commit
我們想将最近的三個送出合并,首先需要如下指令:
其中,-i 的參數是不需要合并的 commit 的 hash 值,這裡即從目前時間往前推的第四個送出, 接着我們就進入到 vi 的編輯模式。
可以看到其中分為兩個部分,上方未注釋的部分是填寫要執行的指令,而下方注釋的部分則是指令的提示說明。指令部分中由 前方的指令名稱、commit hash 和 commit message 組成。
目前我們隻要知道兩個指令: pick 和 squash
pick 的意思是要會執行這個 commit
squash 的意思是這個 commit 會被合并到前一個commit
我們将 9ee35f2 和 5eb5678 這兩個 commit 前方的指令改成 squash 或 s,然後輸入:wq以儲存并退出
這時我們會看到 commit message 的編輯界面
其中, 非注釋部分就是三次的 commit message, 我們要做的就是将這三個修改成一個新的 commit message。
輸入wq儲存并推出, 再次輸入git log檢視 commit 曆史資訊,你會發現這三個 commit 已經合并了。
然後 push 就好啦~
參考:「Git」合并多個 Commit
Git: Allow-empty When Squashing