如何撤销已经推送的提交

撤销已推送提交的安全做法是 git revert <哈希>:生成反向提交,不改写历史,push 后对协作者零影响。只有在确认无人拉取过、或个人分支上,才可用 reset + force-with-lease 强推。

最佳实践
Git 提交历史与版本恢复示意

共享历史的铁律:不改写,只抵消。 git revert <提交哈希> 生成一个"做相反操作"的新提交,推上去后所有人的 pull 都正常工作。这是已推送提交的标准撤销方式。

标准流程

git revert a1b2c3d            # 撤销指定提交
git revert HEAD               # 撤销最近一次
git revert --no-commit A..B   # 多个提交压成一个撤销提交
git push

什么时候可以用强推

同时满足:① 个人分支;② 确认没人基于它工作;③ 团队知情。此时:

git reset --hard HEAD~1
git push --force-with-lease

撤销合并提交

git revert -m 1 <合并提交>

注意后续重新合并该分支需要额外处理(revert 的 revert 或 rebase 分支)。

撤销后的沟通清单

  1. 团队频道告知"某个提交已 revert,原因是什么";
  2. 检查 CI 是否通过;
  3. 如果该提交已进了发布版本,评估是否需要发补丁版本;
  4. 复盘:为什么这个提交会进 main——流程上补一道检查。

常见问题(FAQ)

Q:revert 和"删库重跑"比哪个好?

revert。历史可追溯(什么时候错的、什么时候修的、为什么),这是工程团队的宝贵记录。

Q:revert 的提交信息怎么写?

默认会带 "Revert "原信息""。补充一句为什么撤销(如 "导致支付回调 500"),未来的你会感谢现在写清楚的你。

Q:revert 之后发现问题没那么严重,想恢复回来?

git revert <revert提交>(revert 的 revert),改动就回来了。

参考资料

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台