Git推送耗时过长且超大文件报错,如何取消已移动文件追踪?
Git推送失败及大文件问题解决步骤
核心问题:你遇到的是大文件未从Git历史中彻底移除的问题。将文件移入
temp/并忽略只是让Git不再追踪当前状态的文件,但历史提交记录里仍保留这些大文件,推送时需要同步完整历史,所以文件数量没减少,且大文件依然触发GitHub的大小限制。正确解决步骤:
- 用
git filter-repo彻底清理历史中的大文件(这是Git官方推荐替代旧工具git filter-branch的方案):- 先定位仓库内的大文件:
该命令会列出仓库中体积最大的10个文件及其关联的提交记录。git rev-list --objects --all | grep "$(git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -10 | awk '{print$1}')" - 移除指定大文件的所有历史痕迹(替换
<大文件路径>为实际路径,多个文件可重复执行或用逗号分隔路径):
如果要清理整个git filter-repo --path <大文件路径> --invert-pathstemp/文件夹的历史,执行:git filter-repo --path temp/ --invert-paths
- 先定位仓库内的大文件:
- 确认
.gitignore配置生效:- 打开
.gitignore文件,添加一行temp/,保存后执行:git add .gitignore && git commit -m "Exclude temp/ from tracking"
- 打开
- 强制推送修改后的历史(因修改了历史记录,必须强制推送;若有协作者,需通知他们重新拉取最新仓库):
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
相关产品推荐
相关产品推荐

