首页/开发/Git 与协作速查/git reset --hard 硬重置
Git 基础与命令88 条

git reset --hard 硬重置

回退到指定提交并同步丢弃暂存与工作区改动;未提交的改动无法找回,只适合放弃明确的本地实验。

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

git reset --hard 是什么

git reset --hard 把分支指针移回指定提交,同时重置暂存区与工作区,让这三者都对齐到同一个位置。未提交的改动会被直接丢弃,而且因为从未进入对象库,没有 reflog 可以找回。它只适合放弃明确的本地实验,或者主动把本地状态对齐远端。

与另外两种模式的区别

--soft 只移动指针,改动全部保留在暂存区;--mixed 移动指针并重置暂存区,改动留在工作区;--hard 三者一起重置。三者的差别就是「改动被丢在哪一层」:前两种都不丢内容,只有 --hard 会真的覆盖文件。

基本信息

适用平台Linux / macOS / Windows(Git 2.x)
语法git reset --hard [<提交>]
影响范围HEAD、暂存区与工作区
找回可能已提交内容可用 reflog,未提交改动无法恢复
典型场景丢弃本地实验、对齐远端状态
不涉及未跟踪文件不会被清理

典型使用场景

  • 丢弃实验:本地试了半天的改法不要了,直接回到干净状态
  • 对齐远端:让本地分支强制与远端一致,用于排查环境差异
  • 清理误改:把误操作产生的改动整体复位
  • 回退提交:撤销最近若干条提交并连带丢弃工作区内容
  • 重置基准:在废弃分支上重新开始,把指针挪回某个稳定点

常用示例

常用示例
git status                    # 先看清将要丢弃什么
git stash list                # 确认没有遗忘在栈里的现场
git reset --hard HEAD~1       # 回退一条提交并重置工作区
git reset --hard origin/main  # 让本地与远端完全一致
git reflog -5                 # 误操作后从这里找回已提交内容

三种模式丢什么

模式暂存区工作区
--soft保留保留
--mixed(默认)重置保留
--hard重置重置
执行前先用 git status 与 git stash list 双重确认。正在进行的实验建议先提交到临时分支再重置,否则没有任何找回途径。
--hard 不清理未跟踪文件,需要清理时另用 git clean,并且养成先加 -n 演练的习惯,避免把没纳入版本控制的重要文件一起删掉。

易错点

  • 已推送分支上硬重置后强推会改写他人可见的历史,先确认分支归属再动手
  • --hard 不清理未跟踪文件,需要清理时另用 git clean,并用 -n 先演练
  • 未提交的改动无法通过 reflog 找回,执行前确认没有正在进行的实验
  • 把 --hard 与 --mixed 记混会误删工作区内容,操作前看清参数拼写

数据来源与参考

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