Git切换分支后如何恢复本地未追踪文件?
恢复未提交且未追踪的Git文件
1. 利用Git垃圾回收机制找回文件
Git会暂时保留未被引用的对象(哪怕没提交/暂存),只要没手动清理,大概率能找回:
- 执行命令
git fsck --lost-found,它会扫描所有无归属的Git对象,把找到的文件存到.git/lost-found/other目录里 - 进入这个目录,用
cat或文本编辑器查看文件内容,匹配你丢失的文件后,复制出来重命名即可
2. 检查Stash的残留记录
哪怕git stash pop没成功恢复,也可能有残留的stash记录:
- 先跑
git stash list看看有没有未清理的stash条目,如果有,用git stash apply <stash-id>尝试恢复 - 如果stash已经被删除,执行
git reflog show stash查看stash的操作历史,找到对应的哈希值,再用git stash apply <哈希值>尝试恢复
3. 通过HEAD历史快照恢复
切换分支前的工作区状态可能还在HEAD的reflog里:
- 执行
git reflog,找到切换分支前的那条记录(比如类似HEAD@{2}: checkout: moving from dev to main的条目) - 用
git show HEAD@{n}:./<你的文件名>查看该状态下是否存在目标文件,要是存在,用git show HEAD@{n}:./<你的文件名> > <你的文件名>把内容导出到新文件里
重要提醒
- 别碰
git gc或git prune命令,它们会彻底清理Git的临时对象,一旦执行,找回概率会大幅降低 - 如果是被新分支的同名文件覆盖,先检查当前分支的该文件内容是不是你丢失的版本,不是再用上面的方法
内容的提问来源于stack exchange,提问作者Zeezan
相关产品推荐
相关产品推荐

