切换分支时Git LFS无法下载文件,如何恢复未推送分支的本地工作?
问题结论与解决方案
你的文件没有永久丢失,你遇到的报错本质是切换分支时Git默认会尝试从远程拉取LFS对象,但你对应的分支从未推送到过远程,因此远程不存在对应LFS对象返回404,文件内容实际还存储在你本地的Git提交记录或LFS缓存中。
操作步骤
- 跳过LFS校验切换回目标分支
执行以下命令临时关闭LFS的smudge过滤器,避免切换分支时触发拉取远程LFS对象的逻辑:
git config filter.lfs.smudge "cat"
之后正常切换目标分支即可:
git checkout feature/499-trophy-after-match
切换完成后恢复LFS的默认配置:
git config --unset filter.lfs.smudge
- 从本地LFS缓存恢复文件
报错日志已经给出了缺失文件的LFS哈希值cd5cbe0c9d75fc92257a403ff18539ecd37af2a77bb2defd3a56c12c276d465d,你可以直接在本地LFS存储目录查找对应对象:
- 进入项目的
.git/lfs/objects目录 - 打开哈希前两位对应的
cd文件夹,再打开接下来两位对应的5c文件夹 - 如果找到名称和完整哈希一致的文件,直接将该文件复制到工作区的
Content/Blueprints/Game/Royale/目录,重命名为BP_Gamemode_Royale_Test.uasset即可完成恢复。
也可以执行以下命令自动从本地缓存拉取所有缺失的LFS对象:
git lfs fetch --local git lfs checkout
- 极端情况恢复方案
如果本地LFS缓存被意外清理,你可以直接从本地Git的提交记录中导出该文件的历史版本:
首先找到你提交该文件的提交哈希,执行以下命令导出:
git show <你的提交哈希>:Content/Blueprints/Game/Royale/BP_Gamemode_Royale_Test.uasset > ./BP_Gamemode_Royale_Test.uasset
如果导出的是LFS指针文件,说明提交中仅存储了指针记录,你可以使用该指针文件的哈希值重新搜索本地磁盘,或者用数据恢复工具查找对应哈希的文件。
后续注意事项
后续涉及LFS文件的分支操作前,建议先执行git lfs push origin <分支名>把本地LFS对象同步到远程,避免出现类似问题。
内容的提问来源于stack exchange,提问作者Alexander Blintsov
相关产品推荐
相关产品推荐

