Github 仅保留指定文件 / 文件夹当前 Commit,删除所有历史记录,清除「敏感信息」

本贴最后更新于 1791 天前,其中的信息可能已经沧海桑田

前言

之前在 Github 上发布过一个项目,今天突然想起来:
有个不该上传的东西被我上传上去了!
于是便修改了源代码,但是在 History 中还是能看到以前的提交记录!

慌!

在网上查找了半天,发现都是使用 git filter-branch 进行清除,但我的项目有点特殊:
这个敏感信息,早在第一次就提交过了!
git filter-branch 还有其它方法是对项目进行回滚,达到删除 Commit 记录的目的,对我来说是无效的。

BFG

最后发现了一个神器:BFG-Repo-Cleaner
它能清除掉你指定文件/文件夹名在项目中的所有痕迹!

下载

对于 macOS

如果你安装了 Homebrew,可以使用如下命令安装 BFG:

brew install bfg

使用如下命令使用 BFG:

bfg [命令]

对于 Linux 和未安装 Homebrew 的 macOS

wget https://repo1.maven.org/maven2/com/madgag/bfg/1.13.0/bfg-1.13.0.jar

使用 wget 下载 BFG。它会在你所在目录出现,你可以通过如下命令使用 BFG:

java -jar bfg-1.13.0.jar [命令]
注:需要先安装Java环境才能运行BFG。

对于 Windows

请注意:Windows 系统默认不安装 Java 环境,请自行安装 Java 环境并配置环境变量!

使用任意下载器下载文件:

https://repo1.maven.org/maven2/com/madgag/bfg/1.13.0/bfg-1.13.0.jar

使用 cmd,并切换到下载目录,执行如下命令使用 BFG:

java -jar bfg-1.13.0.jar [命令]

Clone 项目并清除

将你的 Git 项目 Clone 到本地:

git clone https://github.com/AdlerED/Slog4J.git

将后面的项目地址修改为你自己的项目地址。

清除特定文件痕迹

现在,进入到项目的根目录,并执行

bfg --delete-files Tester.java --no-blob-protection

其中:
Tester.java 是我要彻底抹除痕迹的文件名,不需要也不能填写目录,bfg 会删除该文件名的所有痕迹;
--no-blob-protection bfg 默认不会删除当前分支下的文件,如需删除,须添加本参数;
--delete-files 代表删除指定文件,将其替换为**--delete-folders**可以删除指定文件夹。

手动删除文件

还没结束,BFG 并没有删除原文件,只是删除了 .git 中的所有记录,你需要手动去删除这个文件。删除后,你就可以重新将该项目 Commit 并 Push 到 Github 了:

git commit --no-verify
git push -u origin master --force

后语

至此,你的错误已经被“抹去”了,但也要顺便提醒一下:

代码千万条,
安全第一条。
测试不规范,
老板两行泪。

  • GitHub

    GitHub 于 2008 年上线,目前,除了 Git 代码仓库托管及基本的 Web 管理界面以外,还提供了订阅、讨论组、文本渲染、在线文件编辑器、协作图谱(报表)、代码片段分享(Gist)等功能。正因为这些功能所提供的便利,又经过长期的积累,GitHub 的用户活跃度很高,在开源世界里享有深远的声望,并形成了社交化编程文化(Social Coding)。

    207 引用 • 2031 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...