【Git】git revert 或 git stash 或 git restore 都无法正常恢复库文件

bash 复制代码
lijian@DESKTOP-7N7K2GN MINGW64 /lib/release(TEST_PROJECT)
$ git status
Refresh index: 100% (1567/1567), done.
On branch TEST_PROJECT
Your branch is behind 'origin/TEST_PROJECT' by 16 commits, and can be fast-forwarded.
  (use "git pull" to update your local branch)

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   libwebrtc.a

lijian@DESKTOP-7N7K2GN MINGW64 /lib/release(TEST_PROJECT)
$ git restore libwebrtc.a
Encountered 1 file(s) that should have been pointers, but weren't:
        release/libwebrtc.a

根据你的 git statusgit restore 输出,问题出在 libwebrtc.a 是一个 Git LFS(Large File Storage)管理的文件,但当前未被正确识别为 LFS 指针文件,导致 Git 无法正常恢复它。


问题原因

  1. libwebrtc.a 应该由 Git LFS 管理

    • 该文件是二进制库(.a 文件),通常应该通过 Git LFS 存储(而不是直接提交到 Git)。
    • 但当前文件被误识别为普通 Git 文件,导致 git restore 失败。
  2. 错误信息分析

    bash 复制代码
    Encountered 1 file(s) that should have been pointers, but weren't:
            release/libwebrtc.a
    • Git 期望该文件是一个 LFS 指针文件 (如 version https://git-lfs.github.com/spec/v1 开头的文本),但实际是一个二进制文件。

解决方法

1. 检查 Git LFS 是否已安装并初始化

bash 复制代码
git lfs --version  # 确认 Git LFS 已安装

如果没有安装,请先安装 Git LFS:

  • Windows : 从 Git LFS 官网 下载安装。

  • Linux/macOS :

    bash 复制代码
    curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | sudo bash
    sudo apt-get install git-lfs  # Debian/Ubuntu
    brew install git-lfs          # macOS

然后初始化 LFS:

bash 复制代码
git lfs install

2. 确认 libwebrtc.a 是否在 .gitattributes 中被 LFS 管理

bash 复制代码
cat .gitattributes

如果 libwebrtc.a 未被正确标记,需添加规则:

bash 复制代码
echo "libwebrtc.a filter=lfs diff=lfs merge=lfs -text" >> .gitattributes
git add .gitattributes
git commit -m "Track libwebrtc.a with LFS"

3. 强制恢复 LFS 文件

由于文件状态异常,需用 git lfs pull 重新下载 LFS 文件:

bash 复制代码
git lfs pull

如果仍然失败,尝试:

bash 复制代码
git rm --cached libwebrtc.a       # 从 Git 缓存中移除
git reset --hard                  # 强制重置工作区
git lfs pull                      # 重新拉取 LFS 文件

4. 如果文件未正确提交到 LFS

如果该文件之前未正确通过 LFS 提交,需重新提交:

bash 复制代码
git rm --cached libwebrtc.a       # 移除错误提交的文件
git add libwebrtc.a               # 重新添加(此时会通过 LFS 处理)
git commit -m "Fix LFS tracking for libwebrtc.a"
git push origin TEST_PROJECT             # 推送修复后的提交

5. 检查分支状态

你的分支落后 origin/TEST_PROJECT 16 个提交,建议先更新:

bash 复制代码
git pull origin TEST_PROJECT

然后再尝试操作 LFS 文件。


总结

步骤 命令 说明
1. 安装 Git LFS git lfs install 确保 LFS 已初始化
2. 检查 .gitattributes cat .gitattributes 确认文件被 LFS 管理
3. 修复 LFS 跟踪 echo "libwebrtc.a filter=lfs diff=lfs merge=lfs -text" >> .gitattributes 添加 LFS 规则
4. 强制恢复文件 git lfs pullgit reset --hard 重新下载 LFS 文件
5. 重新提交文件 git rm --cached libwebrtc.a && git add libwebrtc.a 确保文件通过 LFS 提交

如果问题仍未解决,可能是仓库的 LFS 配置有误,建议联系仓库管理员确认 libwebrtc.a 是否应通过 LFS 管理。

相关推荐
oscar9995 小时前
Monorepo 全面解析:优势、挑战与适用场景
git·monorepo
龙之叶7 小时前
Git Commit 生成与合入 Patch 指南
git
裸奔的大金毛14 小时前
Tekton - 自定义镜像配置git仓库克隆
git·ci/cd·devops·tekton
Adorable老犀牛17 小时前
可遇不可求的自动化运维工具 | 2 | 实施阶段一:基础准备
运维·git·vscode·python·node.js·自动化
xiaok19 小时前
把代码上传到gitee的时候,怎么忽略node_modules文件夹
git·gitlab·github
唐叔在学习19 小时前
听说有老哥分不清Git branch和tag?这不看看嘛
git·后端
雁于飞1 天前
vscode中使用git、githup的基操
笔记·git·vscode·学习·elasticsearch·gitee·github
小毛驴8502 天前
所有微服务部署都使用一个git地址,并且通过docker部署各个服务的情况下,如何编写mvn指令来处理各个服务。
git·docker·微服务
国王不在家2 天前
git 切换仓库后清理分支缓存
git
柯南二号2 天前
【Gitlab】Ubuntu 20.04服务器部署Gitlab
git·gitlab