如何撤销多个提交

撤销多个提交两种方式:保留历史用 git revert 逐个反向(git revert A..B 或 --no-commit 批量),已推送分支必须用它;未推送的用 git reset --hard <目标提交> 直接回到过去。

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

按"是否已推送"二选一:已推送 → git revert 生成反向提交链(历史不被改写,协作安全);未推送 → git reset --hard <目标提交> 直接把分支拨回去。

方式一:revert(已推送,安全)

# 逐个 revert(从最新到最旧)
git revert e4f5a6b c3d4e5f a1b2c3d

# 范围写法(不含 A 本身)
git revert a1b2c3d..e4f5a6b

# 压成一个撤销提交
git revert --no-commit a1b2c3d..e4f5a6b
git commit -m "撤销本周的错误变更"

冲突时按提示解决后 git revert --continue,放弃用 --abort。

方式二:reset(未推送,干净)

git reset --hard a1b2c3d     # 回到该提交,之后的全部丢弃

想保留改动内容(撤销提交但不丢代码):

git reset --soft a1b2c3d     # 改动进暂存区

怎么选

场景 选择
已推送、共享分支 revert
未推送、个人分支 reset
只撤销其中一个(非连续的) revert 单个提交
想顺便清理历史 reset 或 rebase -i drop

常见问题(FAQ)

Q:revert 顺序有讲究吗?

有:从最新的往最旧的 revert(与提交顺序相反),冲突最少。范围写法 Git 会自动按正确顺序处理。

Q:revert 之后还能把这些改动请回来吗?

git revert <revert提交>(撤销撤销),或找到原提交重新 cherry-pick。

Q:中间某个提交 revert 冲突很大怎么办?

它的后续提交依赖了它。要么连同后续一起 revert,要么接受手工解决冲突的工作量。

参考资料

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

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

立即开始

选择观测云版本

代码托管平台