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

Git推送耗时过长且超大文件报错,如何取消已移动文件追踪?

Git推送失败及大文件问题解决步骤
  • 核心问题:你遇到的是大文件未从Git历史中彻底移除的问题。将文件移入temp/并忽略只是让Git不再追踪当前状态的文件,但历史提交记录里仍保留这些大文件,推送时需要同步完整历史,所以文件数量没减少,且大文件依然触发GitHub的大小限制。

  • 正确解决步骤:

    1. 用git filter-repo彻底清理历史中的大文件(这是Git官方推荐替代旧工具git filter-branch的方案):
      • 先定位仓库内的大文件:
        git rev-list --objects --all | grep "$(git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -10 | awk '{print$1}')"
        
        该命令会列出仓库中体积最大的10个文件及其关联的提交记录。
      • 移除指定大文件的所有历史痕迹(替换<大文件路径>为实际路径,多个文件可重复执行或用逗号分隔路径):
        git filter-repo --path <大文件路径> --invert-paths
        
        如果要清理整个temp/文件夹的历史,执行:
        git filter-repo --path temp/ --invert-paths
        
    2. 确认.gitignore配置生效:
      • 打开.gitignore文件,添加一行temp/,保存后执行:
        git add .gitignore && git commit -m "Exclude temp/ from tracking"
        
    3. 强制推送修改后的历史(因修改了历史记录,必须强制推送;若有协作者,需通知他们重新拉取最新仓库):
      git push origin <你的分支名> --force
      
  • 关于git rm提示‘refspec path not found’的说明:
    这个错误是因为你指定的文件路径在当前工作区或Git追踪列表中不存在——要么是路径输入错误,要么是文件已被移走但仅存在于历史记录里,此时直接用git rm无法处理,必须通过清理历史的方式解决。

  • 额外注意事项:

    • 执行git filter-repo前务必备份整个仓库,避免数据丢失。
    • 若未安装git filter-repo,可通过包管理器安装(如Ubuntu用sudo apt install git-filter-repo,macOS用brew install git-filter-repo)。
    • GitHub单个文件大小限制为100MB,若后续仍需提交大文件,建议启用Git LFS:
      git lfs install
      git lfs track "*.zip"  # 替换为你需要跟踪的大文件类型
      

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 10:32:39