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

时间:2024-03-25 22:14:46

1. git log 查看当前状态

git revert + git rebase 一次性回退多个提交
可以看到我当前状态有四个提交,最初的提交 + 三次提交。现在想用git revert回退这三次提交,但是我们知道git revert是用一次新的提交回退之前的提交,所以我回退三次,就会有三个新的提交,但是我又想只增加一个新的提交,继续看。

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

git revert + git rebase 一次性回退多个提交
git revert + git rebase 一次性回退多个提交
可以看到执行完三次回退后,又新增了三次提交,现在想将这三次提交合并成一个。

3. git rebase合并多次commit

我们想将最近的三个提交合并,首先需要如下命令:
git revert + git rebase 一次性回退多个提交
其中,-i 的参数是不需要合并的 commit 的 hash 值,这里即从当前时间往前推的第四个提交, 接着我们就进入到 vi 的编辑模式。
git revert + git rebase 一次性回退多个提交
可以看到其中分为两个部分,上方未注释的部分是填写要执行的指令,而下方注释的部分则是指令的提示说明。指令部分中由 前方的命令名称、commit hash 和 commit message 组成。

当前我们只要知道两个命令: pick 和 squash

  • pick 的意思是要会执行这个 commit

  • squash 的意思是这个 commit 会被合并到前一个commit

我们将 9ee35f2 和 5eb5678 这两个 commit 前方的命令改成 squash 或 s,然后输入:wq以保存并退出
git revert + git rebase 一次性回退多个提交
这时我们会看到 commit message 的编辑界面
git revert + git rebase 一次性回退多个提交
其中, 非注释部分就是三次的 commit message, 我们要做的就是将这三个修改成一个新的 commit message。
git revert + git rebase 一次性回退多个提交
输入wq保存并推出, 再次输入git log查看 commit 历史信息,你会发现这三个 commit 已经合并了。
git revert + git rebase 一次性回退多个提交
然后 push 就好啦~

参考:「Git」合并多个 Commit
Git: Allow-empty When Squashing