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

使用BFG Repo-Cleaner清理Git仓库后推送仍体积过大问题

解决BFG清理Git仓库后远程体积未缩减的问题

我帮你分析下这个问题,核心原因和GitHub的Pull Request(PR)引用机制有关,咱们一步步拆解解决:

问题根源

你遇到的两个关键问题:

  1. refs/pull/*是GitHub只读隐藏引用:这些引用是GitHub自动为PR生成的,用来跟踪PR的状态,你没有权限修改或推送它们,所以推送时的deny updating a hidden ref提示是正常的,但这些引用还指向未被清理的旧大提交,导致远程仓库的冗余对象没被删除。
  2. GitHub不会立即清理旧对象:就算你推送了清理后的分支,GitHub需要等待自动垃圾回收(GC)运行,才会删除没有任何引用指向的旧对象。

解决步骤

1. 强制推送清理后的核心分支

首先得把你本地清理好的分支(比如main/master、开发分支等)强制推送到远程——因为历史被改写了,普通推送会失败,必须用强制推送:

cd FourierFlows.jl.git
# 推送所有分支(提醒下:这么做要确保团队所有人都知道仓库历史被改写了,得重新克隆)
git push --force --all
# 如果有标签也需要更新,同样强制推送
git push --force --tags

推送时出现的refs/pull相关拒绝提示直接忽略就行,这些引用咱们根本改不了。

2. 移除远程不必要的旧引用(可选)

如果远程还有没用的旧分支、旧标签,也一起删掉,避免它们继续“挂着”旧的大对象:

# 删除远程旧分支示例
git push origin --delete old-branch-name
# 删除远程旧标签示例
git push origin --delete tag/v1.0.0

3. 等待GitHub自动垃圾回收

GitHub会定期自动运行GC,一般1-3天就会清理掉那些没有任何引用指向的旧对象。要是你着急,也可以联系GitHub支持请求手动触发,但大部分情况下等自动清理就够了。

4. 验证清理效果

等GC完成后,再克隆镜像仓库试试,体积应该就降到你本地的大小了:

git clone --mirror https://github.com/FourierFlows/FourierFlows.jl.git

重要提醒

  • 仓库历史被改写后,所有团队成员都得重新克隆仓库,不能再用之前的本地仓库干活,不然会出现严重的历史冲突。
  • refs/pull引用是GitHub的内部机制,不用手动处理,等PR关闭或合并一段时间后,GitHub会自动清理相关的旧对象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:52:33