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

相关推荐
减瓦7 小时前
Windows 环境使用 Git Bash 最佳实践
windows·git
史呆芬8 小时前
CodeX多仓库提交Skill搭建
git·后端·openai
城东9 小时前
Git使用[原意要新建分支提交但是误提交到原来分支恢复办法]
git·原意要新建分支提交·但是误提交到原来分支
开发者联盟league9 小时前
git 压缩本地最近多个commit
git
赵庆明老师18 小时前
Vben精讲:04-了解VSCode中的Git
ide·git·vscode
Irissgwe1 天前
第 5 篇:Git 分支基础:branch、checkout、merge 和冲突解决
git
liberalhumblehopeful1 天前
git代码管理-分支差距过大如何进行同步
git
一只楚楚猫1 天前
一篇文章入门Git工具
git
Irissgwe1 天前
第 6 篇:Git 分支进阶:分支策略、stash、bugfix 和 feature 开发
git