已提交大文件至GitLab,如何彻底从存储中移除?
彻底移除GitLab仓库中的大文件解决方案
你之前用git filter-branch没生效,主要是因为这个工具已被官方弃用,且操作缺少强制推送和GitLab端的垃圾回收步骤。下面是更可靠的操作流程:
步骤1:用官方推荐的git filter-repo重写历史
git filter-repo是Git官方指定替代git filter-branch的工具,处理历史更稳定:
- 先安装工具:
- Debian/Ubuntu:
sudo apt install git-filter-repo - macOS:
brew install git-filter-repo - 通用方式:
pip install git-filter-repo
- Debian/Ubuntu:
- 克隆仓库的镜像版本(避免破坏本地原有仓库):
git clone --mirror <你的GitLab仓库完整URL> - 进入镜像仓库目录:
cd <仓库名称>.git - 执行过滤命令彻底移除
project.rar文件:git filter-repo --path project.rar --invert-paths
步骤2:强制推送重写后的历史到远程
因为修改了仓库提交历史,必须用强制推送覆盖远程旧历史:
git push --force
步骤3:处理本地原有仓库(可选)
如果你本地还有旧仓库副本,不要直接拉取,建议:
- 删除本地旧仓库,重新克隆远程仓库
- 或者执行以下命令重置本地分支:
git fetch origin git reset --hard origin/<你的分支名>
步骤4:触发GitLab的垃圾回收
GitLab不会立刻删除旧历史对象,需手动触发回收释放存储空间:
- 打开GitLab仓库设置页面
- 找到「Repository」选项卡,选择「Cleanup」
- 点击「Start cleanup」按钮,等待GitLab完成回收
注意事项
- 若有其他协作者,务必通知他们重新克隆仓库,不要在旧本地仓库继续开发,否则会引发提交冲突
- 确保你拥有仓库的强制推送权限(GitLab中需开启「Allow force push」权限)
内容的提问来源于stack exchange,提问作者aref razavi
相关产品推荐
相关产品推荐

