Git:撤销最后一次提交
最后更新
要撤销最近一次提交,先想好它的改动该怎么处理。用 git reset --soft HEAD~1 把改动保留在暂存区,用普通的 git reset HEAD~1 把改动保留为未暂存,或者用 git reset --hard HEAD~1 直接丢弃。如果提交只是有点小问题,git commit --amend 可以直接修正它。如果已经推送,就用 git revert,而不是改写历史。要撤销更早的提交或一次撤销多个提交,请看 git 撤销提交页面。
在终端在线编辑器中试试这些命令:浏览器里就是真正的 shell,无需安装。
选择如何处理改动
| 目标 | 命令 |
|---|---|
| 撤销提交,改动保留在暂存区 | git reset --soft HEAD~1 |
| 撤销提交,改动保留为未暂存 | git reset HEAD~1 |
| 撤销提交,丢弃改动 | git reset --hard HEAD~1 |
| 修正最后一次提交(信息或文件) | git commit --amend |
| 撤销已经推送的提交 | git revert HEAD |
完整示例
撤销最后一次提交,换一条更清楚的提交信息重新提交。
| 步骤 | 命令 | 结果 |
|---|---|---|
| 1 | git reset --soft HEAD~1 | 提交被移除,改动仍在暂存区 |
| 2 | git 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 课程也会一步步教你撤销更改。