首页/开发/Git 与协作速查/git reset 默认模式(--mixed)
Git 基础与命令88 条

git reset 默认模式(--mixed)

默认行为:重置暂存区但保留工作区改动;用于取消全部暂存,或回退提交后重新挑拣文件。

Git 与协作速查开发更新于 2026-10-13

git reset 的默认模式是什么

git reset 不带参数时就是 --mixed 模式:把分支指针移回指定提交,同时重置暂存区,但保留工作区文件不动。结果是原本已暂存的改动全部退回「已修改未暂存」状态,内容一点没丢。它常被用来一次性取消全部暂存。

回退提交时它做了什么

执行 git reset HEAD~1 时,分支指针后退一条,上一条提交的内容被放回工作区。历史里少了一条提交,改动却完整保留,之后可以用 git add -p 重新组织成新的提交。这与 --hard 形成鲜明对比:后者会把工作区一起重置,内容直接消失。

基本信息

适用平台Linux / macOS / Windows(Git 2.x)
语法git reset [--mixed] [<提交>] [--] [路径]
影响范围HEAD 与暂存区
工作区保留改动,不覆盖文件内容
等价写法git reset 无参数;git reset --mixed HEAD
路径形式git reset -- <路径> 只取消指定文件的暂存

典型使用场景

  • 取消全部暂存:把暂存区清空,重新挑选要提交的改动
  • 回退一条提交:撤销最近一次提交但保留改动,重新组织
  • 修正提交范围:混进无关文件时退回来重新暂存
  • 拆分提交:把一条大提交退回工作区,再拆成若干条
  • 调整分支:把本地分支指针移动到指定的历史位置

常用示例

常用示例
git reset                    # 取消全部暂存,改动留在工作区
git reset HEAD~1             # 回退一条提交,改动回到工作区
git reset --mixed HEAD~1     # 与上一条等价,显式写法
git reset -- src/app.py      # 只取消该文件的暂存
git status --short           # 核对改动落在哪一层
git add -p                   # 重新组织成新的提交

三种 reset 模式对比

模式HEAD暂存区工作区
--soft移动保留不动
--mixed(默认)移动重置不动
--hard移动重置重置
回退一条提交后,改动散落在工作区,可以用交互式暂存重新组织成新提交,比在原提交上修修补补更灵活。
reset 的默认模式不会碰工作区文件,但加 --hard 会直接覆盖。两个模式只差一个参数,后果差别很大,执行前看清楚命令。

易错点

  • 与 --soft 的差别只在暂存区是否保留,操作前用 git status 确认改动落在哪一层
  • reset 默认不碰工作区文件,但 reset --hard 会,两个模式别记混
  • 回退已推送的提交会改变分支历史,需要强推并影响协作者,先确认分支归属
  • 不带路径参数时 reset 会移动分支指针,只想取消暂存要用 -- <路径> 或先确认目标提交

数据来源与参考

  • Git 官方文档:git-reset(--mixed)
  • Pro Git 2nd Edition · 7.7 重置揭密
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌