Skip to content

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 revertgit reset + force push
历史是否保留✅ 保留❌ 会重写
对团队协作安全性✅ 安全❌ 如果别人拉了坏 commit,会冲突
可追溯性✅ 可追溯❌ 被 reset 后原 commit 消失
操作复杂度简单需要 force push + 协调团队

5️⃣ 总结流程

  1. 找到坏 commit 的 hash:
bash
git log --oneline
  1. 执行 revert:
bash
git revert <commit>
  1. 解决可能的冲突,提交 revert commit。
  2. 推送到远端:
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 是最安全的撤回方式。