解决 Git LFS 切换分支失败问题
场景描述
在本地已有分支 A 的情况下,目前工作在分支 B。当尝试从 B 分支切回 A 分支时,由于 A 分支存在 LFS 上传的大文件,导致切换失败。这个问题通常是因为某些 LFS 文件在服务器上不存在或没有权限访问。
报错日志
切换分支时遇到的错误日志如下:
Error downloading internal/rdb/dump.rdb (852c652352e4ac590e4002b42849c82a4bae3c962cce5c0f774dc132c3436058): [852c652352e4ac590e4002b42849c82a4bae3c962cce5c0f774dc132c3436058] Object does not exist on the server or you don't have permissions to access it: [404] Object does not exist on the server or you don't have permissions to access it
Errors logged to '/Desktop/.git/lfs/logs/20240926T173103.764992.log'.
Use `git lfs logs last` to view the log.
error: external filter 'git-lfs filter-process' failed
fatal: internal/rdb/dump.rdb: smudge filter lfs failed
解决办法
为了成功切换回分支 A,并处理 LFS 文件的问题,可以按照以下步骤操作:
-
忽略 LFS 报错并强制切换分支
由于 LFS 文件的问题导致无法正常切换分支,我们可以通过忽略 LFS 报错并强制切换分支来解决这个问题。执行以下命令:
GIT_LFS_SKIP_SMUDGE=1 git checkout -f A
这里,
GIT_LFS_SKIP_SMUDGE=1
用于忽略 LFS 文件下载错误,-f
用于强制切换分支。 -
删除 LFS 的大文件提交
切换到分支 A 后,如果确认不再需要 LFS 的大文件,可以删除这些文件的提交记录。具体操作如下:
git rm --cached docker/RedisShake/internal/rdb/dump.rdb git commit -m "Remove large LFS file"
这将从 Git 历史记录中删除该文件,但不会从工作目录中删除它。
-
推送更改
最后,将更改推送到远程仓库:
git push origin A