You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用git filter-repo后提交丢失,求原因及项目恢复方法

问题原因解释

你用的git filter-repo --force --path <文件路径>命令,默认逻辑是只保留指定路径相关的所有提交,而非删除该路径的内容。因为你要删的视频文件在后续提交里已经不存在了,所以这些后续提交会被过滤掉,最终仓库就只剩下包含这个视频文件的那些旧提交,看起来像是回到了以前的状态。另外你原命令里的路径多了个空格(res/ raw/),这也会导致命令匹配逻辑出现偏差。

项目恢复方法

方法1:利用filter-repo自动备份

git filter-repo执行时会自动把原分支引用备份到refs/original/目录下,直接执行以下命令就能恢复到操作前的状态:

git reset --hard refs/original/refs/heads/<你的分支名>

如果是默认主分支(比如main或master),命令可以简化为:

git reset --hard refs/original/refs/heads/main

方法2:通过reflog恢复

如果备份被意外清理,用git引用日志找回操作前的提交:

  1. 查看reflog记录,找到执行filter-repo之前的提交哈希:
git reflog
  1. 重置到该提交:
git reset --hard <找到的提交哈希>
正确删除大文件历史的命令

要彻底移除这个视频文件的所有历史,需要添加--invert-paths参数反转筛选逻辑(即排除指定路径),同时修正路径的空格问题:

git filter-repo --force --invert-paths --path myapp/app/src/main/res/raw/intro.mp4

内容的提问来源于stack exchange,提问作者Kowal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 10:30:59