Git 撤销操作速查表 — reset / revert / restore
Git 撤销操作是开发者日常最常用的操作之一,也是最容易出错的。本文详细对比 reset/revert/restore 三种撤销方式的使用场景和区别,帮助你在任何时候都知道"如何撤销刚才的操作"。
更新: 2026-07-15·19 条命令
快速选择
| 场景 | 命令 | 推荐度 |
| 撤销上次 commit,保留修改继续改 | git reset --soft HEAD~1 | ⭐⭐⭐⭐⭐ |
| 彻底丢弃上次 commit 的所有修改 | git reset --hard HEAD~1 | ⭐⭐ 慎用 |
| 撤销已推送的提交 | git revert | ⭐⭐⭐⭐⭐ |
| 丢弃工作区的未暂存修改 | git restore | ⭐⭐⭐⭐⭐ |
| 撤销暂存区的修改 | git restore --staged | ⭐⭐⭐⭐⭐ |
核心命令详解
### git reset — 移动 HEAD 指针
reset 有三种模式,区别在于对工作区和暂存区的影响:
| 模式 | HEAD | 暂存区 | 工作区 | 安全等级 |
--soft | ✅ 移动 | ✅ 保留 | ✅ 保留 | 🟢 安全 |
--mixed(默认) | ✅ 移动 | ❌ 清空 | ✅ 保留 | 🟡 注意 |
--hard | ✅ 移动 | ❌ 清空 | ❌ 丢弃 | 🔴 危险 |
revert 不修改历史,而是创建一个新的提交来抵消旧提交的更改。这是已推送提交的唯一安全撤销方式。
``bash
# 撤销单个提交
git revert abc1234
# 撤销多个连续提交 git revert HEAD~3..HEAD
# 只撤销更改但不自动创建提交(检查后再提交)
git revert --no-commit abc1234
`
### git restore — 丢弃未提交的修改
`bash
# 丢弃工作区的修改
git restore src/app.ts
# 丢弃所有工作区修改 git restore .
# 从暂存区移出(不修改工作区) git restore --staged src/app.ts ``
撤销操作(19)
| 命令 | 难度 | ||
|---|---|---|---|
git commit --amend修改最近的提交信息或内容 | 基础 | git commit --amend -m "New message" | |
git reset --soft软重置,保留更改在暂存区 | 中级 | git reset --soft HEAD~1 | |
git reset --mixed混合重置,保留更改在工作区 | 中级 | git reset --mixed HEAD~1 | |
git reset --hard硬重置,丢弃所有更改 | 中级 | git reset --hard HEAD~1 | |
git revert撤销一个提交的更改(通过新提交) | 中级 | git revert HEAD | |
git revert --no-commit撤销更改但不自动提交 | 中级 | git revert --no-commit HEAD | |
git restore恢复工作区文件到指定状态 | 基础 | git restore file.txt | |
git restore --staged将暂存区的文件取消暂存 | 基础 | git restore --staged file.txt | |
git restore .恢复所有工作区文件的更改 | 基础 | git restore . | |
git restore --source从指定提交恢复文件 | 中级 | git restore --source HEAD~2 file.txt | |
git checkout --丢弃工作区文件的更改 | 基础 | git checkout -- file.txt | |
git checkout -f强制切换分支并丢弃本地更改 | 基础 | git checkout -f main | |
git clean -fd强制删除未跟踪的文件和目录 | 中级 | git clean -fd | |
git clean -n预览将要删除的未跟踪文件 | 基础 | git clean -n | |
git clean -fdX删除被 .gitignore 忽略的文件和目录 | 中级 | git clean -fdX | |
git reflog显示引用日志(所有HEAD移动历史) | 中级 | git reflog | |
git rebase --abort中止正在进行中的变基操作 | 中级 | git rebase --abort | |
git cherry-pick --abort中止正在进行中的拣选操作 | 中级 | git cherry-pick --abort | |
git bisect reset重置二分查找状态 | 中级 | git bisect reset |
常见问题
本速查表数据整理自各工具官方文档。最后更新: 2026-07-15。