Git从历史记录中删除大文件-Bitbucket

问题描述

我不小心将一个文件推送到Bitbucket中的远程git reposiroy。 该文件的扩展名为.webm。 我将*.webm放在.gitignore中,然后为了删除它,我运行了BFG:

java -jar bfg-1.13.0.jar --delete-files *.webm
git reflog expire --expire=Now --all && git gc --prune=Now --aggressive
git push origin --force

问题是最后一个命令一直将原始.webm文件推送到远程存储库,而bitbucket却说我的存储库已达到1Gb +的已用空间。

如果我运行而不是最后一条命令git push -u origin master,则表明我需要执行git pull,这使我再次下载了大文件

我在做什么错?我应该直接从Bitbucket删除文件吗?

解决方法

请参阅BFG文档的"Your files are sacred"段落:

默认情况下,BFG不会修改您在master(或“ HEAD”)分支上的最新提交的内容,即使它会清除之前的所有提交。

那是因为您的最新提交很可能是您部署到生产中的提交

(...)

如果要关闭保护功能(通常不建议这样做),可以使用--no-blob-protection标志:

$ bfg --strip-biggest-blobs 100 --no-blob-protection repo.git

另一种方法是手动将其从头提交中删除:

git rm --cached thatfile.webm
git commit --amend

这可以解决您的问题吗?