Git LFS报错:服务器对象不存在[404],推送失败怎么解决?
解决Git LFS变基后推送失败的问题
问题根源
你在特性分支启用Git LFS后,本地提交的LFS对象并未推送到远程仓库。交互式变基过程中,Git需要拉取这些未上传的对象(但服务器上不存在),导致变基报错;后续推送时,远程仓库找不到对应的LFS对象,因此拒绝推送。
解决方案步骤
1. 确认本地是否保留了缺失对象的原始文件
首先通过对象ID定位对应的文件:
git lfs ls-files | grep ca46f1a
如果能找到对应文件路径,直接进入下一步;如果找不到,通过git reflog找到变基前的特性分支版本,切换过去提取原始文件:
# 查看变基前的分支提交记录 git reflog # 切换到变基前的提交(比如记录里的feature@{1}) git checkout feature@{1} # 复制文件到临时目录 cp xxx/src/main/resources/xxx.xxx /tmp/ # 切回变基后的分支 git checkout feature
2. 推送缺失的LFS对象到远程
如果本地已有原始文件,直接推送对象ID到远程:
git lfs push --object-id origin ca46f1a88a9c6e61b918af1ab38be3e7903b986616551f0a6f10a7ecc5730cd4
如果是从旧分支恢复的文件,先替换当前分支的对应文件,再重新提交并推送:
cp /tmp/xxx.xxx xxx/src/main/resources/xxx.xxx git add xxx/src/main/resources/xxx.xxx # 修正最近的提交(如果该文件在多个提交中,可能需要重新变基调整) git commit --amend --no-edit # 推送LFS对象和分支 git lfs push origin feature git push origin feature
3. 修复变基后的提交历史(可选)
如果变基过程中多个提交都涉及该LFS文件,导致历史中存在大量无效的LFS指针,可以用git filter-repo清理历史(注意:此操作会改写历史,仅在本地分支未共享时使用):
# 安装git-filter-repo后执行 git filter-repo --force --replace-refs delete-no-add # 重新推送所有LFS对象和分支 git lfs push origin --all git push origin feature --force
4. 预防后续问题
- 每次提交含LFS文件后,先执行
git lfs push origin <分支名>确保对象上传,再推送代码 - 变基前,执行
git lfs ls-files --missing检查是否有未推送的LFS对象,确保全部上传后再变基 - 设置Git自动推送LFS对象:
git config --global lfs.pushurl origin,这样git push会自动同步LFS对象
内容的提问来源于stack exchange,提问作者morpheus
相关产品推荐
相关产品推荐

