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

如何从未推送的Git提交历史中移除指定大文件?

解决Git提交历史中移除大文件的问题

为什么你之前的操作报错?

  1. 绝对路径无效:git filter-branch执行时会创建临时目录(报错里的.git-rewrite/t)并切换到该目录运行命令。你用绝对路径指向的是原仓库的文件位置,但临时目录里没有这个路径,因此Git判定文件在仓库外。
  2. 未兼容无文件的提交:部分提交里可能不存在这个大文件,直接用git rm会触发报错中断命令执行。
  3. 误用系统命令:用系统的rm而非git rm时,临时目录找不到文件就不会修改提交,导致Git提示“分支未更改”。

正确操作步骤

1. 切换到仓库根目录

在Fork的控制台中,先切换到你的Unity项目根目录(即包含.git文件夹的文件夹)。比如你的项目路径是C:/Users/steve/research/Research,执行:

cd "C:/Users/steve/research/Research"

2. 执行过滤命令

添加--ignore-unmatch参数,确保没有目标文件的提交也能正常处理:

git filter-branch --tree-filter "git rm -f --ignore-unmatch Assets/Demo/Unnamed1-SW_HSM.dae" HEAD
  • --ignore-unmatch:若当前提交不含目标文件,命令不会报错,会自动处理下一个提交。
  • 路径Assets/Demo/Unnamed1-SW_HSM.dae是相对于仓库根的路径,匹配临时目录内的文件结构。

3. 强制推送修改后的历史

因为修改了本地提交历史,需强制推送到远程仓库:

git push --force

更高效的替代方案(可选)

Git官方推荐用git filter-repo替代git filter-branch,它速度更快、稳定性更强。如果你的环境已安装该工具,执行以下命令即可:

git filter-repo --path Assets/Demo/Unnamed1-SW_HSM.dae --invert-paths

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 22:01:09