前言
此前我们写过一篇使用 git reset
命令回滚错误提交的博客,本文我们将使用 git revert
命令来实现。
git reset
:
- 在前面的博客中我们提到过,
git reset
命令需要使用--hard
来重置工作区,且需要使用git push -f
来强制推送到远程分支,回滚的内容会直接丢失。这种方式使用时需要极其谨慎。
git revert
:
- 因此本文介绍一种更加安全的方法——
git revert
。git revert
命令同样可以回滚代码,不过每一次 revert 都会产生一次新的提交,且 revert 产生的提交同样可以被下一次的 revert 命令回滚。因此这种方式几乎不用担心内容丢失。
实现
问题复现
问题解决
切换分支
确保当前位于我们需要回滚的分支(本例中回滚master分支):
回滚本地master分支
使用如下命令回滚提交:
# 注意由于此前切换到了master分支,因此HEAD此时指向master分支
git revert HEAD
此时,我们已经把本地分支的提交回滚了。
push到远程分支
接下来我们把本地 revert 提交 push 到远程分支:
git push
此时,远程分支的提交也被回滚了。
revert多次提交
在本小结,我们在之前的基础上 revert 两个提交(第一次 revert 和此前的一次提交)。
使用如下命令 revert 最近两次提交:
# HEAD~2为git中相对引用的知识点,这里不赘述。
git revert HEAD~2
但需要注意的是:例如在 develop 分支的哈希值为 c1
的提交被 merge 到 master 分支后,然后通过 git revert
命令回滚提交,当再次进行 merge 操作时是无法把 c1
这次提交 merge 到 master 了。
因此,在这种场景下,只能通过 git reset
来回滚提交。
总结
在 Git 中,使用 git revert
命令来回滚错误的提交。相比于 git reset
命令,此命令更加安全和可追溯。