GitHub 有一篇文章正是针对这一点的。在这里查看。总结这篇文章:您可以使用git filter-branch
命令或 BFG Repo-Cleaner。BFG Repo-Cleaner 使用起来更容易、更快捷,所以我使用它。要使用 BFG Repo-Cleaner,请执行以下步骤:
- 在项目 repo 或使用 macos下载jar 文件
brew install bfg
--mirror
使用以下标志克隆您的 repo 的新副本:
git clone --mirror git://example.com/some-big-repo.git
如果使用 SSH 或
git clone --mirror https://example.com/some-big-repo.git
如果使用 HTTPS。
这是一个裸存储库,因此您将无法看到您的文件,但它将是包含所有提交的存储库的完整副本。
- 然后,您可以使用以下命令从以前的提交中删除特定文件:
java -jar bfg.jar --delete-files [FILE NAME] --no-blob-protection my-repo.git
或者如果安装到 PATH
bfg --delete-files [FILE NAME] --no-blob-protection my-repo.git
或从旧提交中删除密码
bfg --replace-text passwords.txt
- 在推送回您的仓库之前,通过进入您的 git repo 文件夹并运行以下命令来检查仓库历史记录是否已更改:
git reflog expire --expire=now --all && git gc --prune=now --aggressive
接着
git gc
删除您不想推送回您的存储库的不需要的数据。
- 一旦你满意,通过运行推回你的远程仓库
git push
- 请注意,因为你--mirror
在克隆你的仓库时使用了标志,当你推回你的仓库时,你也会推回参考更改。
要了解有关 BFG Repo-Cleaner 的更多信息,请访问此链接。