You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

git reset --hard HEAD~1与git checkout .的区别是什么?

Git中git reset --hard HEAD~1和git checkout .的作用与差异

一、两个命令的具体作用

1. git reset --hard HEAD~1

这个命令是彻底回滚分支状态,一次性完成三件事:

  • 把当前分支的指针往回移动1个提交(HEAD~1代表上一次提交的位置),相当于从分支历史里直接删掉了最后一次提交;
  • 清空暂存区,让暂存区内容和回退后的提交完全一致;
  • 覆盖工作区所有文件,让工作区也和回退后的提交内容完全匹配。

简单说:它会抹掉最后一次提交,同时把你本地没提交的所有修改(不管是工作区还是暂存区的)全部删除——这些内容基本是永久丢失(没推送到远程的话,只能通过git reflog这类高级操作尝试找回提交记录,未提交的修改找不回来)。

2. git checkout .

这个命令是撤销工作区的本地修改,只针对工作区操作:

  • 将工作区中所有已被Git跟踪的文件,恢复成和「暂存区当前内容」一致的状态;如果暂存区是空的(没有暂存任何修改),就恢复成和「当前HEAD提交」一致的状态。

简单说:它只改工作区,暂存区的内容不动,提交历史也完全没变化。比如你在工作区改了几个文件还没git add,用这个命令后,工作区的修改就没了;但如果已经git add到暂存区的内容,依然留在暂存区里,后续可以继续提交或者取消暂存。

二、核心差异对比

  • 操作范围不同
    • git reset --hard HEAD~1:同时修改提交历史、暂存区、工作区,是全链路的彻底回滚
    • git checkout .:只修改工作区,暂存区和提交历史完全不受影响
  • 对提交历史的影响
    • 前者会直接删除当前分支的最后一次本地提交,分支历史会被缩短
    • 后者完全不碰提交记录,所有之前的提交都原封不动
  • 未提交修改的处理
    • 前者会清空工作区+暂存区的所有未提交修改,这些内容直接丢失
    • 后者只撤销工作区的修改,暂存区的修改依然保留,你可以自主选择后续操作
  • 恢复难度
    • 前者的提交记录需要用git reflog查找恢复,未提交修改无法恢复
    • 后者的工作区修改如果刚被撤销,可能还有机会找回,且暂存区内容不受影响,风险小很多

内容的提问来源于stack exchange,提问作者Juan Fruto

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 00:05:08