# git reset 参考

URL: https://caijiao.org/reference/git/reset
Source: docs/reference/git/reset.md
Description: git reset Reference，整理 --soft、--mixed、--hard、HEAD~1、撤销本地提交、取消暂存、风险和恢复建议。

`git reset` 用于移动当前分支的 HEAD，并按模式影响暂存区和工作区。它适合处理本地未推送历史；已推送的提交通常优先考虑 `git revert`。

## 语法

```bash
git reset [--soft|--mixed|--hard] <commit>
```

## 常用模式

| 模式 | HEAD | 暂存区 | 工作区 | 常见用途 |
| --- | --- | --- | --- | --- |
| `--soft` | 移动 | 保留 | 保留 | 撤销 commit，保留 staged |
| `--mixed` | 移动 | 重置 | 保留 | 撤销 commit 和暂存，默认模式 |
| `--hard` | 移动 | 重置 | 重置 | 丢弃本地改动，风险最高 |

## 示例

撤销最后一次本地提交，但保留改动：

```bash
git reset --soft HEAD~1
```

取消暂存文件：

```bash
git reset HEAD file.md
```

回到某个提交并丢弃工作区改动：

```bash
git reset --hard <commit>
```

## 常见错误

- 对已推送共享分支使用 reset 后强推，会改写别人依赖的历史。
- 不确认工作区状态就使用 `--hard`，可能丢失未提交改动。
- 把 reset 和 revert 混用：reset 改历史，revert 新增一个反向提交。

## 相关内容

- [Git Reference](/reference/git/)
- [git revert](/reference/git/revert)
- [git reflog](/reference/git/reflog)
- [Git 如何撤销最后一次 commit](/how-to/git/undo-last-commit)
- [Git 教程：reset 与 revert](/git/history/reset-revert)
- [git-reset 官方文档](https://git-scm.com/docs/git-reset)
