Menu
CoddyTech

Git Revert

最后更新

git revert 通过创建一个新提交来撤销某个提交,新提交应用的是原提交改动的反向操作。由于它是追加历史而不是改写历史,revert 是撤销已推送提交的安全方式。和 git reset 不同,它不会迫使其他人去处理被改写的分支。

在终端在线编辑器中试试这些命令:浏览器里就是真正的 shell,无需安装。

git revert 保留出错的提交,再新增一个应用其反向改动的提交,历史从不被改写。

语法

命令作用
git revert HEAD撤销最近一个提交
git revert <hash>按哈希值撤销指定提交
git revert HEAD~2..HEAD撤销一段范围内的提交
git revert -n <hash>撤销但暂不提交(只暂存)
git revert -m 1 <merge-hash>撤销合并提交,保留第 1 个父提交

revert 进行中

如果 revert 遇到冲突,解决之后继续即可。

命令作用
git revert --continue解决冲突后继续
git revert --abort取消正在进行的 revert
git revert --skip跳过当前提交并继续

revert vs reset

特性git revertgit reset
改写历史否是
对已推送的提交安全是否
创建新提交是否
撤销中间的某个提交可以不方便

git revert 常见问题

git revert 和 git reset 有什么区别?
git revert 新增一个提交来撤销之前某个提交的改动,历史保持完整,对已推送的提交也很安全。git reset 把分支指针往回移动并改写历史,对本地提交没问题,但在共享分支上很危险。撤销公开的提交用 revert,撤销本地提交用 reset。
已经推送的提交怎么撤销?
运行 git revert <hash>(撤销最新提交可用 git revert HEAD),然后推送新生成的 revert 提交。由于 revert 不改写历史,这才是撤销共享提交的正确方式:不需要强制推送,也不会影响已经拉取过的队友。
怎么撤销合并提交?
合并提交有两个父提交,所以 Git 需要知道保留哪一条历史线。使用 git revert -m 1 <merge-hash>,其中 -m 1 告诉 Git 保留第一个父提交(通常就是你合并进去的那个分支)。撤销合并会撤掉合并进来的改动,但合并本身仍然留在历史中。
可以一次撤销多个提交吗?
可以。传入一个范围,例如 git revert HEAD~2..HEAD,撤销最后两个提交,也可以列出多个哈希值。默认情况下,Git 会为每个被撤销的提交各创建一个 revert 提交;加上 -n 可以只暂存所有反向改动而不提交,然后由你自己做一次提交。
可以在线练习吗?
可以。打开终端在线编辑器,就能在浏览器里的真实 shell 中运行 git revert,无需安装。Coddy 的免费互动 Git 课程也会一步步教你撤销更改。
Coddy 编程语言插图

在 Coddy 学习 Git

开始