Appearance
1️⃣ git revert 是什么?
git revert <commit> 会创建一个 新的 commit,用来抵消指定 commit。
原来的 commit 不会被删除或修改,只是增加了一个反向操作。
原来的 commit 历史:
A --- B --- C (C 是坏 commit)
执行 git revert C 后:
A --- B --- C --- C' (C' 是抵消 C 的新 commit)2️⃣ 基本用法
单个 Commit
bash
# 查看历史
git log --oneline
# 假设坏 commit 为 abc1234
git revert abc1234- Git 会自动生成一个 commit message,如
Revert "坏 commit 的描述"。 - 默认会进入编辑器,你可以修改 commit message 后保存提交。
多个连续 Commit
bash
git revert -n <oldest_commit>^..<newest_commit>
git commit -m "Revert several bad commits"说明:
-n或--no-commit:先把反向修改放到暂存区,但不提交。- 范围
<oldest>^..<newest>表示从 oldest 的父 commit 到 newest 之间的 commit。 - 方便一次性撤销多个连续的坏 commit。
冲突处理
- 如果被 revert 的 commit 与当前代码冲突,会出现 冲突提示。
- 解决冲突后执行:
bash
git add <冲突文件>
git commit完成 revert。
3️⃣ 推送到远端
因为 git revert 是新增 commit,不修改历史,可以直接推送:
bash
git push origin main远端将看到一个新的 commit,如:
Revert "abc1234 坏 commit 描述"4️⃣ 为什么推荐 revert 而不是 reset?
| 比较项 | git revert | git reset + force push |
|---|---|---|
| 历史是否保留 | ✅ 保留 | ❌ 会重写 |
| 对团队协作安全性 | ✅ 安全 | ❌ 如果别人拉了坏 commit,会冲突 |
| 可追溯性 | ✅ 可追溯 | ❌ 被 reset 后原 commit 消失 |
| 操作复杂度 | 简单 | 需要 force push + 协调团队 |
5️⃣ 总结流程
- 找到坏 commit 的 hash:
bash
git log --oneline- 执行 revert:
bash
git revert <commit>- 解决可能的冲突,提交 revert commit。
- 推送到远端:
bash
git push origin main✅ 安全、优雅、可追溯,适合多人协作。
6️⃣ 可视化示意
历史状态:
A --- B --- C (坏 commit)
执行 git revert C 后:
A --- B --- C --- C' (C' 抵消 C)
如果多个连续 commit 坏了:
A --- B --- C --- D --- E
git revert -n C^..E
git commit -m "Revert C-D-E"
结果:
A --- B --- C --- D --- E --- R
(R 是统一生成的反向 commit)✅ 使用说明:
- 输入你想撤回的 commit hash
- 点击按钮,页面会显示对应的
git revert <hash>命令- 点击复制按钮,可直接复制命令到剪贴板
- 完全在 VitePress 内可交互,无需额外页面
💡 提示:
- 永远不要在多人协作的远端分支上随意使用
reset --hard+push --force,除非确认没人基于坏 commit 工作。revert是最安全的撤回方式。
