用 git reset --soft head~1 撤销提交但保留暂存区,已 add 文件仍为绿色状态,工作区代码不变,可直接修改提交信息或补加文件后重新提交。

你在 Mac 上刚执行了 git commit,但还没来得及 git push,现在想撤掉这次提交、保留所有代码修改,又不想丢失已 add 的文件状态。
用 git reset --soft 撤销提交但保留暂存区
这一步最常用,适合你只想改提交信息或补加文件的场景。
在终端进入项目目录,运行:
git reset --soft HEAD~1
执行后,最后一次 commit 被撤销,但所有已 git add 的文件仍保留在暂存区(绿色状态),工作区代码完全不变。你可以直接 git commit -m "新注释" 重新提交,或者先 git add 新文件再提交。
【HEAD~1 表示上一个 commit,不能写成 HEAD-1 或 HEAD^1(部分 shell 会报错)】
如果连 git add 也想一并撤销
方法一:用 --mixed(默认参数,可省略)
git reset HEAD~1
这会让所有已 add 的文件退回为未暂存状态(红色),但代码修改依然保留在编辑器里——相当于回到 git add 之前,适合你想重新筛选哪些文件该进本次提交。
方法二:用 --hard(危险操作)
git reset --hard HEAD~1
这会彻底删除刚才那次 commit + 所有 git add 记录 + 工作区所有修改。除非你明确要丢弃全部改动,否则【不要用 --hard】。
只改提交信息,不碰代码和暂存区
第一步:执行
git commit --amend
第二步:终端会自动打开默认编辑器(通常是 vim),把光标移到第一行,修改提交信息,按 Esc 键退出编辑模式,输入 :wq 回车保存退出。
第三步:如果只想改注释、其他都不动,这一步就完成了。新提交会替换旧提交,哈希值变化,但暂存区和工作区完全不受影响。











