git revert 命令
简介
git revert 是 Git 中用于撤销提交的命令。与 git reset 不同,git revert 通过创建新提交来撤销更改,不会重写历史。
基本概念
Revert vs Reset
| 特性 |
Revert |
Reset |
| 历史 |
不重写历史 |
重写历史 |
| 安全性 |
安全,适合已推送的提交 |
危险,只适合本地提交 |
| 操作 |
创建新提交 |
移动 HEAD 指针 |
| 协作 |
适合共享分支 |
不适合共享分支 |
Revert 的作用
- 撤销指定提交的更改
- 创建新的提交记录撤销操作
- 不改变历史记录
- 适合已推送的提交
命令语法
1 2 3 4 5 6 7 8
| git revert <提交>
git revert <提交1> <提交2>
git revert <提交1>..<提交2>
|
查看帮助文档
常用选项
| 选项 |
说明 |
-n, --no-commit |
不自动提交,只修改工作区 |
-e, --edit |
编辑提交信息(默认) |
--no-edit |
使用自动生成的提交信息 |
-m <parent-number> |
指定父提交(用于合并提交) |
-s, --signoff |
添加 Signed-off-by 行 |
-S, --gpg-sign |
使用 GPG 签名提交 |
--no-verify |
跳过 pre-commit 钩子 |
--continue |
继续 revert(解决冲突后) |
--abort |
中止 revert |
--skip |
跳过当前提交 |
基本使用
1. 撤销单个提交
1 2 3 4 5 6 7 8
| $ git revert HEAD
$ git revert abc1234
$ git revert --no-edit abc1234
|
2. 撤销多个提交
1 2 3 4 5
| $ git revert abc1234 def5678
$ git revert HEAD~3..HEAD
|
3. 撤销合并提交
1 2 3 4
| $ git revert -m 1 merge-commit-hash
|
4. 撤销但不提交
1 2 3 4 5 6
| $ git revert -n abc1234
$ git add . $ git commit -m "Revert with modifications"
|
5. 处理冲突
1 2 3 4 5 6 7 8 9 10 11 12 13
| $ git revert abc1234
$ vim file.txt $ git add file.txt
$ git revert --continue
$ git revert --abort
|
实际应用场景
场景1:撤销已推送的提交
1 2 3 4 5
| $ git revert abc1234
$ git push origin main
|
场景2:撤销错误的修复
1 2 3 4 5
| $ git revert fix-commit-hash
$ git push origin main
|
场景3:撤销合并提交
1 2 3 4 5
| $ git revert -m 1 merge-commit-hash
$ git push origin main
|
场景4:撤销多个相关提交
1 2 3 4 5 6 7
| $ git revert HEAD~3..HEAD
$ git revert commit1 $ git revert commit2 $ git revert commit3
|
场景5:撤销后修改
1 2 3 4 5 6 7 8 9
| $ git revert -n abc1234
$ vim file.txt
$ git add . $ git commit -m "Revert with modifications"
|
常见问题和解决方案
问题1:撤销合并提交失败
错误信息:
1
| error: commit abc1234 is a merge but no -m option was given
|
解决方案:
1 2
| $ git revert -m 1 merge-commit-hash
|
问题2:撤销时产生冲突
解决方案:
1 2 3 4 5 6 7 8 9 10
| $ git status $ vim conflicted-file.txt $ git add conflicted-file.txt
$ git revert --continue
$ git revert --abort
|
问题3:想撤销多个提交但顺序不对
解决方案:
1 2 3
| $ git revert --no-commit HEAD~2..HEAD $ git commit -m "Revert multiple commits"
|
最佳实践
1. 用于已推送的提交
1 2 3 4 5 6
| $ git revert abc1234 $ git push origin main
$ git reset HEAD~1
|
2. 撤销后立即推送
1 2 3 4 5
| $ git revert abc1234
$ git push origin main
|
3. 编写清晰的撤销信息
1 2 3 4 5
| $ git revert -e abc1234
$ git revert -m "Revert problematic feature" abc1234
|
4. 撤销合并提交时指定主分支
1 2
| $ git revert -m 1 merge-commit-hash
|
总结
git revert 是安全撤销提交的方式:
- 基本用法:
git revert <提交> 撤销提交
- 撤销合并:
git revert -m 1 撤销合并提交
- 不提交:
git revert -n 撤销但不自动提交
- 处理冲突:解决冲突后使用
--continue
关键要点:
- ✅ 用于已推送的提交(安全)
- ✅ 不重写历史,创建新提交
- ✅ 适合共享分支
- ✅ 撤销合并提交时指定主分支
- ❌ 不要对已推送的提交使用 reset