📅  最后修改于: 2023-12-03 15:36:13.403000             🧑  作者: Mango
有时候我们会在 Git 仓库中意外提交了一些敏感的文件、密码文件等等,并且我们需要将这些文件从仓库中完全删除,一般的推送回退只是将最新的提交回退,而不会将历史记录删除。本文将介绍如何从 Git 中删除文件历史记录,完全删除这些文件。
我们需要先下载 BFG 工具来处理这个问题。BFG 是一个 GitHub 开源项目,提供一个简单的,高效的用于移除文件和文件内容的 Git 丰富命令。
BFG 工具的下载地址:https://rtyley.github.io/bfg-repo-cleaner/
在进行任何更改操作之前,最好先备份您的 Git 仓库,以避免不可预知的错误。
$ git clone --mirror git://example.com/some-big-repo.git
说明:
这将克隆整个仓库,包括所有分支和提交。
假设我们想要删除敏感文件 passwords.txt
,我们可以使用以下命令运行 BFG 工具:
$ java -jar ~/Downloads/bfg-1.13.0.jar --delete-files passwords.txt your_repo.git
说明:
--delete-files passwords.txt
: 表示删除名为passwords.txt
的文件your_repo.git
: 表示您要进行修改的 Git 仓库
运行 BFG 后,BFG 将会对您的 Git 仓库进行修改,将历史记录中的所有引用转换到新 Git 历史记录上。
运行以下命令,以清理您的 Git 仓库。
$ cd your_repo.git
$ git reflog expire --expire=now --all && git gc --prune=now --aggressive
说明:
git reflog expire --expire=now --all
: 这命令将 Git 仓库中所有项目和分支的 reflog(引用日志)删除,只保留当前 reflog 的活动内容git gc --prune=now --aggressive
: 这个命令将 Git 仓库中废弃的对象进行编译,并且进行打包压缩,以使仓库更小。--prune=now
表示清除所有垃圾文件。
最后,您可以将修改的 Git 仓库推送到原始 Git 仓库。
$ git push
通过本文,我们了解了如何使用 BFG 工具从 Git 中删除文件历史记录,并完全清理 Git 仓库,以避免敏感文件泄露的风险。