Menu
CoddyTech

Git:撤销最后一次提交

最后更新

要撤销最近一次提交,先想好它的改动该怎么处理。用 git reset --soft HEAD~1 把改动保留在暂存区,用普通的 git reset HEAD~1 把改动保留为未暂存,或者用 git reset --hard HEAD~1 直接丢弃。如果提交只是有点小问题,git commit --amend 可以直接修正它。如果已经推送,就用 git revert,而不是改写历史。要撤销更早的提交或一次撤销多个提交,请看 git 撤销提交页面。

在终端在线编辑器中试试这些命令:浏览器里就是真正的 shell,无需安装。

撤销最后一次提交会把 HEAD 往回移一步,模式决定改动是留在暂存区、留在工作区,还是被丢弃。

选择如何处理改动

目标命令
撤销提交,改动保留在暂存区git reset --soft HEAD~1
撤销提交,改动保留为未暂存git reset HEAD~1
撤销提交,丢弃改动git reset --hard HEAD~1
修正最后一次提交(信息或文件)git commit --amend
撤销已经推送的提交git revert HEAD

完整示例

撤销最后一次提交,换一条更清楚的提交信息重新提交。

步骤命令结果
1git reset --soft HEAD~1提交被移除,改动仍在暂存区
2git commit -m "clearer message"重新提交同样的改动

Git 撤销最后一次提交常见问题

怎么撤销最后一次提交但保留改动?
运行 git reset --soft HEAD~1。它会移除最后一次提交,但把改动留在暂存区,你可以马上重新提交。如果想让改动以未暂存的状态留在工作区,改用 git reset HEAD~1(默认模式)。
怎么撤销最后一次提交并删除改动?
运行 git reset --hard HEAD~1。它会移除这个提交,并从工作区中丢弃它的改动。这是破坏性操作:如果你可能还需要这些工作,请改用 --soft,或者之后通过 git reflog 找回。
如果只需要修改提交信息呢?
使用 git commit --amend。它会重新打开最后一次提交,让你修改提交信息(需要的话也可以重新暂存文件),而不会产生单独的新提交。不要 amend 已经推送的提交,因为它会改写历史。
已经推送的最后一次提交怎么撤销?
使用 git revert HEAD。revert 会创建一个新提交来抵消最后一次提交,历史保持完整,是共享分支上的安全选择。对已推送的提交执行 reset,会迫使其他人去处理被改写的分支。
可以在线练习吗?

可以。打开终端在线编辑器,就能在浏览器里的真实 shell 中运行这些命令,无需安装。Coddy 的免费互动 Git 课程也会一步步教你撤销更改。

Coddy 编程语言插图

在 Coddy 学习 Git

开始