作用:移动 HEAD 和分支引用,重写历史
适用场景:
作用:创建新的提交来撤销之前的更改,保留历史
适用场景:
| 模式 | 命令 | HEAD 位置 | 暂存区 | 工作区 | 使用场景 |
|---|---|---|---|---|---|
| --soft | git reset --soft HEAD~1 |
✅ 移动 | ✅ 保留 | ✅ 保留 | 想要重新提交,保留修改 |
| --mixed | git reset --mixed HEAD~1 |
✅ 移动 | ❌ 清空 | ✅ 保留 | 默认模式,想要重新添加文件 |
| --hard | git reset --hard HEAD~1 |
✅ 移动 | ❌ 清空 | ❌ 清空 | 完全丢弃更改(⚠️危险) |
| 特性 | git reset | git revert |
|---|---|---|
| 是否修改历史 | 是,重写历史 | 否,追加提交 |
| 提交ID变化 | 后续提交ID改变 | 新增提交,原提交保留 |
| 远程仓库影响 | 需要强制推送 (--force) | 正常推送即可 |
| 团队协作 | ⚠️ 不推荐在公共分支使用 | ✅ 推荐在公共分支使用 |
| 撤销多个提交 | 一次操作 | 需要多次操作或使用范围 |
| 可追溯性 | 难以追溯被删除的提交 | 完整保留所有历史 |
# 撤销最近一次提交,但保留修改(soft reset) git reset --soft HEAD~1 # 撤销最近一次提交,取消暂存但保留修改(mixed reset) git reset HEAD~1 # 完全删除最近一次提交(hard reset - 危险!) git reset --hard HEAD~1 # 撤销某个特定的提交(revert) git revert <commit-hash> # 撤销最近一次提交(revert) git revert HEAD # 撤销多个提交(revert范围) git revert HEAD~3..HEAD # 撤销合并提交(需要指定主线) git revert -m 1 <merge-commit-hash>