执行git filter-repo后拉取远程,如何恢复本地历史与文件?
恢复丢失文件及撤销错误操作的方案
一、撤销git filter-repo操作,恢复原分支状态
git filter-repo默认会备份操作前的分支历史到refs/original/heads/main,执行以下命令即可回退到执行该命令前的本地状态:
git reset --hard refs/original/heads/main
执行后,所有被filter-repo修改或删除的文件将恢复。
二、找回被pull删除的未提交本地文件
针对未提交就被覆盖、删除的本地文件,可尝试:
- 执行Git对象恢复命令:
git fsck --lost-found
该命令会将Git数据库中未被引用的对象(可能包含未提交的文件内容)导出到.git/lost-found/other目录。进入该目录查看文件内容,提取需要恢复的文件并重命名即可。
- 利用VS Code Timeline恢复:对于Timeline可见的文件,直接从Timeline中选择对应版本恢复。
三、正确处理大文件推送失败问题
避免重复错误,推荐两种处理方式:
方式1:保留本地文件,仅移除Git跟踪
无需重写历史,适合多人协作场景:
git rm --cached <大文件路径> git commit -m "Remove large file from Git tracking" git push origin main
方式2:彻底移除历史中的大文件(重写历史)
若必须删除历史中的大文件,执行filter-repo后直接强制推送,不要执行pull:
git filter-repo --path <大文件路径> --invert-paths --force git push origin main --force
⚠️ 注意:重写历史后强制推送会覆盖远程分支,需提前告知协作者同步本地分支。
内容的提问来源于stack exchange,提问作者mkk
相关产品推荐
相关产品推荐

