1. 程式人生 > >git revert + git rebase 一次性回退多個提交

git revert + git rebase 一次性回退多個提交

1. git log 檢視當前狀態

在這裡插入圖片描述
可以看到我當前狀態有四個提交,最初的提交 + 三次提交。現在想用git revert回退這三次提交,但是我們知道git revert是用一次新的提交回退之前的提交,所以我回退三次,就會有三個新的提交,但是我又想只增加一個新的提交,繼續看。

2. git revert回退依次三個提交

在這裡插入圖片描述
在這裡插入圖片描述
可以看到執行完三次回退後,又新增了三次提交,現在想將這三次提交合併成一個。

3. 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