Git:使用“git revert”命令回滚错误的提交

郎家岭伯爵 2023年11月28日 456次浏览

前言

此前我们写过一篇使用 git reset 命令回滚错误提交的博客,本文我们将使用 git revert 命令来实现。

git reset

  • 在前面的博客中我们提到过,git reset 命令需要使用 --hard 来重置工作区,且需要使用 git push -f 来强制推送到远程分支,回滚的内容会直接丢失。这种方式使用时需要极其谨慎。

git revert

  • 因此本文介绍一种更加安全的方法——git revertgit revert 命令同样可以回滚代码,不过每一次 revert 都会产生一次新的提交,且 revert 产生的提交同样可以被下一次的 revert 命令回滚。因此这种方式几乎不用担心内容丢失。

实现

问题复现

问题解决

切换分支

确保当前位于我们需要回滚的分支(本例中回滚master分支):

checkout到对应分支

回滚本地master分支

使用如下命令回滚提交:

# 注意由于此前切换到了master分支,因此HEAD此时指向master分支
git revert HEAD

revert回滚提交

填写revert命令的信息

此时,我们已经把本地分支的提交回滚了。

push到远程分支

接下来我们把本地 revert 提交 push 到远程分支:

git push

push到远程分支

查看分支状态

此时,远程分支的提交也被回滚了。

revert多次提交

在本小结,我们在之前的基础上 revert 两个提交(第一次 revert 和此前的一次提交)。

使用如下命令 revert 最近两次提交:

# HEAD~2为git中相对引用的知识点,这里不赘述。
git revert HEAD~2

revert最近两次提交

再次查看分支状态

但需要注意的是:例如在 develop 分支的哈希值为 c1 的提交被 merge 到 master 分支后,然后通过 git revert 命令回滚提交,当再次进行 merge 操作时是无法把 c1 这次提交 merge 到 master 了。
因此,在这种场景下,只能通过 git reset 来回滚提交。

总结

在 Git 中,使用 git revert 命令来回滚错误的提交。相比于 git reset 命令,此命令更加安全和可追溯。