跳转到主内容
极星编程网:以代码为星,赴技术山海!

Git怎么撤销上一次提交(commit) 回滚代码版本与reset命令【操作指南】

误提交后应按需求选择 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 (推荐使用 --force-with-lease 而非 --force,防止覆盖他人新提交)。

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 。

相关文章