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

如何恢复因Git fetch及reset操作丢失的未提交本地修改?

恢复Git误操作前的状态:找回丢失的提交与被覆盖的本地修改

别慌,Git几乎不会彻底删除数据,咱们一步步拆解问题,把你的仓库恢复到误操作前的状态:

第一步:找回被git reset --hard HEAD^丢弃的本地提交

你执行的reset --hard只是把当前分支的指针移到了上一个提交,但之前那个被丢弃的提交其实还在Git的「引用日志」里躺着呢:

  • 先运行git reflog,你会看到一串类似下面的记录:
    abc1234 HEAD@{0}: reset --hard HEAD^: moving to HEAD^
    def5678 HEAD@{1}: commit: 你的提交描述(哪怕当时没填信息,这里也会有默认标识)
    ghi9012 HEAD@{2}: commit: 上一个正常提交
    
    找到reset --hard之前的那个提交(比如上面的def5678),记下它的提交ID。
  • 接着运行git reset --hard def5678,这样你的本地分支就会回到那个提交的状态了。

第二步:恢复被覆盖的未提交本地修改

你提到本地有未提交修改时执行git fetch后文件被覆盖——其实fetch本身不会修改本地文件,可能是后续的操作(比如误执行了pull或者merge)导致的,但没关系,Git会保留未提交修改的临时快照:

  • 运行git fsck --lost-found,这个命令会把所有Git追踪过但没被引用的文件内容放到.git/lost-found/other/目录下。
  • 进入这个目录,用cat <blob-id>查看每个文件的内容,找到你需要恢复的文件后,把内容复制出来覆盖当前仓库里对应的文件就行。

第三步:解决远程分支冲突,完成推送

现在你的本地分支回到了之前的状态,但远程分支还有网页端的提交,直接push肯定还是会被拒,这时候咱们用变基来整合提交:

  • 运行git pull --rebase origin branchA,这个命令会把远程的新提交拉下来,然后把你的本地提交放到这些提交的后面,避免产生合并提交。
  • 等变基完成后,再运行git push origin branchA,这次就能成功推送到远程了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:53:42