← 中文资源

简体中文版本

使用 git revert 安全撤销提交

在共享分支上通过创建一个反向提交来撤销已推送的提交,保留历史记录,避免强制推送带来的协作破坏。

阅读英文原文

为什么用 revert 而不是 reset

git reset --hard 会重写分支历史,迫使每个协作者恢复。git revert 新增一个反向提交,分支保持只追加,审计记录同时保留错误和修正。

git log --oneline -5
git revert --no-edit 4f3c2a1
git push origin main

步骤

  1. 用 git log --oneline -10 确认要撤销的提交及其内容。
  2. 执行 git revert --no-edit <commit-sha>。如果需要一次撤销多个提交,或冲突需要人工编辑,使用 --no-commit。
  3. 运行相关测试并检查 diff,确认只改变预期行为。
  4. 正常推送 revert 提交,不要对共享分支强制推送。

验证

  • git log 在原始提交之后显示新的 Revert "..." 提交。
  • 原始提交修改的文件恢复到之前的内容。
  • 撤销后的分支测试通过。
  • git status 干净,远程分支同时包含原始提交和撤销提交。

常见问题

如果 revert 报告冲突,解决文件、暂存后执行 git revert --continue;冲突通常意味着后续提交依赖被撤销的代码。如果要撤销的是合并提交,使用 git revert -m 1 <merge-sha>,并确认哪个父提交代表主线。

限制

revert 不修复根因,应另开一个修正实现。它也会在历史中保留原始提交,因此不适合处理安全事件中的敏感数据;此类情况需要重写历史并轮换凭据。