Git 代码撤回完全指南
在日常开发中,我们经常会遇到需要撤回代码的情况。本文将详细介绍两种常见场景的解决方案:已提交未推送的代码撤回,以及已提交已推送的代码撤回。
场景一:撤回已提交但未推送的代码
问题描述
代码已经通过 git commit 提交到本地仓库,但还没有 git push 到远程仓库。这时想要撤回这次提交。
解决方案
方案 1:保留代码更改(推荐)
使用 git reset --soft 可以撤销提交,但保留所有更改在暂存区:
# 撤销最近一次提交,保留更改在暂存区
git reset --soft HEAD~1
效果:
- ✅ 提交被撤销
- ✅ 代码更改保留在暂存区(可以重新审查)
- ✅ 可以重新修改后再次提交
查看当前状态:
git status
方案 2:保留代码更改但取消暂存
使用 git reset --mixed(或简写为 git reset):
# 撤销最近一次提交,更改保留在工作区但不在暂存区
git reset HEAD~1
效果:
- ✅ 提交被撤销
- ✅ 代码更改保留在工作区
- ❌ 更改不在暂存区(需要重新
git add)
方案 3:完全删除代码更改(危险)
使用 git reset --hard,慎用:
# ⚠️ 警告:此操作会永久删除所有更改
git reset --hard HEAD~1
效果:
- ✅ 提交被撤销
- ❌ 代码更改被永久删除
- ⚠️ 无法恢复
撤销多次提交
如果要撤销最近 N 次提交:
# 撤销最近 3 次提交(保留更改)
git reset --soft HEAD~3
# 撤销最近 2 次提交(删除更改)
git reset --hard HEAD~2
后续操作
取消某个文件的暂存
git restore --staged <文件名>
# 取消所有文件的暂存
git restore --staged .
丢弃某个文件的更改
git restore <文件名>
场景二:撤回已提交且已推送的代码
问题描述
代码已经通过 git commit 提交并通过 推送到远程仓库。现在需要撤回这次提交。

