撤销Git提交需据推送状态选择方法:未推送用git reset --soft HEAD~1保留修改重提,或--hard彻底丢弃;已推送必须用git revert生成反向提交以保历史完整。

在Mac终端中撤销上一次Git提交,需先确认该提交是否已推送到远程仓库——未推送可安全回退,已推送则必须用反向提交避免破坏协作历史。
本地未推送:保留修改内容再调整
这一步适合刚执行完 git commit 但还没运行 git push 的情况,比如漏加文件、提交信息写错或想合并进下一次提交。
运行 git reset --soft HEAD~1。
执行后,上次提交被撤销,但所有已修改的文件仍保留在暂存区(git status 显示为绿色“已暂存”)。你可以直接 git commit -m "新信息" 重提,或先 git add 补充遗漏文件再提交。
注意:不要用 --hard,否则代码改动会彻底丢失,且无法通过常规命令找回。
本地未推送:彻底丢弃全部修改
仅当你明确不需要上一次提交里的任何代码变更时才使用此方法,例如误提交了测试日志、临时调试语句或敏感配置。
运行 git reset --hard HEAD~1。
这会同时清空暂存区和工作区,使项目状态完全回到上一次提交那一刻。操作不可逆,执行前务必确认没有需要保留的未提交改动。
如果不确定,先运行 git stash 保存当前工作区状态,再执行 reset ——之后可用 git stash pop 恢复。
已推送至远程:生成反向提交(推荐协作场景)
只要 git push 已成功执行,无论是否多人协作,都应放弃 reset + force push 方案,改用 revert 创建新提交来抵消上一次更改。
方法一:撤销最近一次推送的提交
运行 git revert HEAD → 编辑器弹出后,保留默认撤销信息或补充说明 → 保存退出 → 运行 git push。
方法二:撤销某次特定历史提交
先运行 git log --oneline 查看简明提交列表,复制目标提交前7位哈希(如 abc1234)→ 运行 git revert abc1234 → 同样编辑并保存撤销信息 → git push。
revert 不会删除原有提交记录,只是新增一个“取反”提交,远程仓库历史保持线性完整,其他协作者拉取时不会产生冲突。


















