执行git reset HEAD --hard丢失本地未提交文件,求助恢复方法
恢复Git硬重置后丢失的暂存文件与修改
从Reflog定位关键状态
你的git reflog记录了所有HEAD的变动,重点关注执行git reset HEAD --hard之前的节点。HEAD@{15}对应的cd5ba09是最后一次正常提交,你丢失的是这次提交后未完成提交的暂存修改——这些内容不在commit历史里,但可能还保存在Git的对象数据库中。
提取悬空Blob对象内容
你通过git fsck --lost-found找到的悬空树对象仅显示目录结构,需要进一步查找存储文件内容的Blob对象:
- 列出所有悬空Blob对象:
git fsck --lost-found | grep blob | awk '{print $3}'
- 逐个查看Blob内容,匹配你丢失的文件:
git show <blob-id>
- 找到匹配的Blob后,导出到对应文件路径:
git show <blob-id> > admin.mydomain.ca/assets/js/dashboard.js
重复此操作,恢复所有丢失的文件和修改。
检查历史暂存区快照
Git会保留暂存区的历史状态,你可以尝试查看重置操作前的暂存内容:
- 查看某条reflog记录对应的暂存区文件:
git show HEAD@{1}:admin.mydomain.ca/assets/css/dashboard.css
- 对比两次reflog之间的暂存区差异:
git diff HEAD@{2} HEAD@{1} --cached
尝试替换reflog中的序号(如HEAD@{14}、HEAD@{15}),找到包含你丢失内容的状态。
恢复后同步远程仓库
成功恢复文件后,在本地创建新提交并强制推送到GitHub:
git add . git commit -m "Recover lost changes after accidental hard reset" git push --force origin main
⚠️注意:强制推送会覆盖远程分支历史,若有协作者需提前通知他们同步修改。
后续预防建议
- 避免随意执行
git reset --hard,该操作会直接丢弃未提交的修改和暂存区内容; - 遇到提交卡住时,优先用
git status排查状态,或用git stash暂存修改后再处理。
内容的提问来源于stack exchange,提问作者Jayy
相关产品推荐
相关产品推荐

