撤销最近一次提交的四种方式

撤销最近提交按需求选:保留改动到暂存区 git reset --soft HEAD^;保留到工作区 git reset HEAD^;彻底丢弃 git reset --hard HEAD^;只想修正内容用 git commit --amend。已推送用 git revert。

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

看你要"撤销"到什么程度,四种选择:

想要的效果 命令
撤销提交,改动回暂存区(马上重提) git reset --soft HEAD^
撤销提交,改动回工作区(继续改) git reset HEAD^(--mixed)
连改动一起丢弃 git reset --hard HEAD^
不是撤销,是修正(补文件/改信息) git commit --amend

场景对照

# 提交信息写错了 / 漏了文件
git add 漏掉的文件
git commit --amend

# 提交的粒度想重排(拆成几个小提交)
git reset --soft HEAD^
# 逐个 add + commit

# 这个提交压根不该存在,但代码还想留着改
git reset HEAD^

# 这活儿整段白干了
git reset --hard HEAD^

已推送的情况

以上 reset 都只适用于未推送的提交。已推送的用 revert:

git revert HEAD
git push

常见问题(FAQ)

Q:HEAD^ 和 HEAD~1 有区别吗?

对普通提交没区别,都指父提交。merge 提交时 HEAD^ = HEAD^1(第一个父),HEAD~1 沿主线退一步——合并场景下含义才分叉。

Q:撤销后想把改动拆成两个提交?

git reset HEAD^ 后用 git add -p 分批暂存、分批提交。

Q:amend 和 reset --soft 重提有什么区别?

结果一样。amend 是"编辑这个提交"的直达操作,少一步,优先用 amend。

参考资料

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

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

立即开始

选择观测云版本

代码托管平台