执行git filter-repo后本地文件丢失,如何恢复未推送的重要文件?
恢复本地未推送文件的方法
1. 查看Git引用日志(reflog)
Git会记录所有分支和HEAD的变更轨迹,哪怕是被重写的提交也能在这里找到。执行以下命令:
git reflog
你会看到类似这样的条目:
abc1234 HEAD@{0}: filter-repo: rewrite def5678 HEAD@{1}: commit: add important local changes
找到执行filter-repo操作前的那个提交哈希(比如示例里的def5678),切换到该提交:
git checkout def5678
此时你就能看到未推送的文件,立刻将这些文件复制到仓库外的安全位置。
2. 重置分支到操作前状态
如果要把当前分支恢复到filter-repo执行前的状态,找到操作前的提交哈希后,执行:
git reset --hard def5678
注意:这个操作会覆盖当前分支的所有现有变更,务必先备份好重要文件再执行。
3. 检查filter-repo的自动备份
git filter-repo默认会在.git/refs/original/目录下备份原有分支引用,你可以先查看该目录:
ls .git/refs/original/
如果存在备份,直接将分支指向备份的引用即可恢复,比如恢复main分支:
git update-ref refs/heads/main .git/refs/original/refs/heads/main
执行git log确认历史恢复后,检查本地文件是否完整。
4. 找回未追踪的文件
如果未推送的文件是从未被Git追踪的(没执行过git add),Git不会记录它们的变动,这时候需要依赖系统级的文件恢复工具:
- Windows:优先查看回收站,或使用Recuva这类第三方工具
- macOS:通过Time Machine备份恢复,或使用Disk Drill
- Linux:使用
testdisk、extundelete这类数据恢复工具
内容的提问来源于stack exchange,提问作者jakemdaly
相关产品推荐
相关产品推荐

