按这个顺序操作,可最大程度找回丢失或被误删的 LFS 大文件。
一、快速诊断与定位
检查本地对象是否缺失或损坏
运行:git lfs fsck,常见输出包括:missing object:
查看工作区是否只剩“指针文本”
典型指针内容以如下片段开头(包含 version 与 oid sha256:…):
version https://git-lfs.github.com/spec/v1
oid sha256:4e9a3…
size 1234567
若工作区文件体积异常小且内容类似上述文本,说明指针未正确“smudge”为真实二进制。
查看 LFS 操作日志
日志路径:.git/lfs/commands.log,有助于定位失败阶段与对象 OID。
二、恢复路径 A 远程仓库仍完好
拉取缺失对象
git lfs fetch --allgit lfs fetch origin master --include="design/*.psd"git lfs fetch origin <commit-hash>git lfs fetch colleague --object-id=<missing-oid>(将同事仓库临时添加为远程)将对象签出到工作区
git lfs checkout(在 Git LFS 3.0+ 已标记为 deprecated,但在紧急恢复时依然有效)git lfs pull(等价于 fetch + checkout 的组合)三、恢复路径 B 远程也缺失或对象被删除
从本地历史重建指针并重新下载
git log --pretty=format:%H -- "path/to/large-file.psd"git show <commit-hash>:path/to/large-file.psdgit lfs pull 重新拉取对应 OID 的二进制对象从其他克隆仓库迁移对象
git remote add colleague <url>git lfs fetch colleague --object-id=<missing-oid>git lfs dedup(去重/硬链复用)对象确实已被删除且无可追溯来源
若远程与所有克隆均不再保留该 OID 的二进制对象,通常无法恢复。此时只能从备份或原始介质找回,再重新 git add 并 git lfs push 到服务器。
四、常见报错与修复要点
“Object does not exist on the server / 404”
说明仓库中仍有指针,但服务器侧 LFS 对象不存在。若有原始文件:
cp 原始文件 xxx.data → git add xxx.data → git lfs push <remote> <branch> --all → git checkout xxx.data“Encountered X file(s) that may not have been copied correctly / smudge 错误”
处理步骤:
git lfs version、git lfs installgit lfs fetch --all 再 git lfs checkout 或 git lfs pullGIT_TRACE=1 GIT_LFS_TRACE=1 git lfs pull“LFS object missing / corrupted object”
先 git lfs fsck 确认缺失/损坏的 OID,再按“路径 A/B”从远程、历史或其他克隆恢复对象。
五、恢复后的加固与预防
多远程与多端备份
git lfs push --all origin && git lfs push --all backup定期完整性校验
git lfs fsck --strict,并保存校验报告,及时发现对象缺失或损坏。规范清理与权限管控