误提交后应按需求选择 Git reset 模式:--soft 仅移 HEAD、保留暂存区;--mixed(默认)回退 HEAD 和暂存区、保留工作区;--hard 彻底丢弃所有变更;已推送则需 --force-with-lease 强推;共享分支宜用 git revert 创建反向提交。

如果您在 Git 中误提交了代码,需要撤销上一次 commit 但保留工作区或暂存区的修改,则需根据具体目标选择不同 reset 模式。以下是几种常见场景下的操作步骤:
一、仅撤销提交记录,保留暂存区与工作区(--soft)
该方式将 HEAD 向后移动一位,但不改变暂存区和工作区内容,原提交的变更仍处于已暂存状态,便于重新提交或修改提交信息。
1、打开终端,进入项目根目录。
2、执行命令:git reset --soft HEAD~1。
3、运行 git status 确认文件处于“Changes to be committed”状态。
4、如需修改提交信息,执行 git commit --amend -m "新提交信息"。
二、撤销提交并取消暂存,保留工作区修改(--mixed)
这是默认的 reset 行为,HEAD 和暂存区回退,但工作区文件保持不变,适合重新选择要提交的文件。
1、确保当前分支为待操作分支,执行 git status 查看当前状态。
2、运行命令:git reset HEAD~1(等价于 git reset --mixed HEAD~1)。
3、执行 git status,确认所有变更显示为“Changes not staged for commit”。
4、使用 git add 重新暂存所需文件,再执行 git commit 提交。
三、彻底撤销提交并丢弃所有变更(--hard)
该操作会同时重置 HEAD、暂存区和工作区,使代码恢复至上一次提交时的状态,**不可逆且会永久删除未提交的修改**,请谨慎使用。
1、先备份重要未提交文件,或确认无需保留当前工作区改动。
2、执行命令:git reset --hard HEAD~1。
3、运行 git log --oneline 验证最新提交已变为前一个 commit。
4、若误操作且尚未推送,可通过 git reflog 查找被丢弃的 commit hash 并用 git reset --hard
四、撤销已推送到远程仓库的提交
当错误提交已被推送,需强制覆盖远程分支,要求团队成员同步更新本地仓库,避免后续冲突。
1、在本地完成所需 reset(如 git reset --hard HEAD~1)。
2、执行强制推送:git push --force-with-lease origin
3、通知协作成员执行 git fetch origin 后,使用 git reset --hard origin/
五、不删除提交记录,仅创建反向提交(revert)
该方式通过新增一次 commit 来抵消上一次提交的变更,保留完整历史,适用于已共享分支且需审计追溯的场景。
1、执行命令:git revert HEAD。
2、编辑默认生成的提交信息,保存并退出。
3、运行 git log --oneline 查看新增的 revert commit 记录。
4、推送至远程:git push origin










