误用了 git commit --amend 怎么撤销
撤销 amend:git reflog 找到 amend 前的提交哈希,git reset --soft <原提交哈希> 即可恢复。amend 只是生成了新提交,原提交仍在 reflog 中,30 天内随时可回。
别慌,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 确认最近提交确实是自己的。