【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 管理。

相关推荐
深海鱼在掘金1 天前
Git 完全指南 —— 第1章:Git 概览与版本控制演进
git
noravinsc2 天前
关于Git Flow
git
蜜獾云2 天前
在Git中配置用户名和密码
git
scx_link2 天前
通过git bash在本地创建分支,并推送到远程仓库中
开发语言·git·bash
南大白2 天前
IntelliJ IDEA 运行时的 JVM 本地内存溢出崩溃
git
码农小旋风2 天前
Claude Code 基础用法大全:对话、分析、修改、测试、Git 和工作流
人工智能·git·chatgpt·claude
南大白2 天前
Git 撤回提交完整方案
git
像风一样的男人@2 天前
python --实现代理服务器
git·ui
sbjdhjd2 天前
从零搭建企业级 CI/CD(下):Jenkins+GitLab+Harbor 全链路实战指南
git·servlet·ci/cd·云原生·云计算·gitlab·jenkins
码云数智-大飞2 天前
Go Channel 详解:并发通信的正确姿势
前端·数据库·git