误用了 git commit --amend 怎么撤销

撤销 amend:git reflog 找到 amend 前的提交哈希,git reset --soft <原提交哈希> 即可恢复。amend 只是生成了新提交,原提交仍在 reflog 中,30 天内随时可回。

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

别慌,amend 是可逆的:amend 本质是"生成新提交替换旧提交",旧提交对象还在。用 git reflog 找到 amend 之前的提交哈希,git reset --soft <旧哈希> 即可把分支拨回去。

恢复步骤

git reflog
# 找到类似这样的记录:
# b2c3d4e HEAD@{0}: commit (amend): 你的新信息
# a1b2c3d HEAD@{1}: commit: 原来的提交信息      ← 这就是 amend 前

git reset --soft a1b2c3d

--soft 把分支拨回原提交,amend 带进来的改动留在暂存区——你可以选择:

  • 想要 amend 的改动单独成新提交:git commit -m "...";
  • 不想要那些改动:git restore --staged . && git restore .。

场景变体

  • amend 改错了信息:不用再 reset,直接 git commit --amend -m "正确信息" 再修一次;
  • amend 误吞了别人的提交内容:reflog 找到对方提交哈希,reset --soft 回去后重新整理;
  • 已推送后的 amend:本地恢复后需要 --force-with-lease 推送。

常见问题(FAQ)

Q:amend 多次之后 reflog 里一堆记录怎么找?

看提交信息列和动作类型(commit (amend) vs commit),从下往上找最后一个非 amend 的 commit 记录。

Q:reflog 能看多久?

记录保留受一般条目、不可达条目和对象回收配置共同影响,不存在保证的恢复窗口。尽快找到旧提交并建立分支引用。

Q:想避免误 amend?

IDE 的提交按钮和命令行分开用;amend 前 git log -1 确认最近提交确实是自己的。

参考资料

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

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

立即开始

选择观测云版本

代码托管平台