惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

G
Google Developers Blog
人人都是产品经理
人人都是产品经理
爱范儿
爱范儿
云风的 BLOG
云风的 BLOG
Last Week in AI
Last Week in AI
H
Hackread – Cybersecurity News, Data Breaches, AI and More
B
Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
H
Help Net Security
B
Blog RSS Feed
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
N
Netflix TechBlog - Medium
S
SegmentFault 最新的问题
The Cloudflare Blog
I
InfoQ
美团技术团队
博客园 - 三生石上(FineUI控件)
MyScale Blog
MyScale Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - 司徒正美
L
LangChain Blog
A
About on SuperTechFans
T
The Blog of Author Tim Ferriss
Y
Y Combinator Blog

技术改变视野

为程序员、设计师打造的摸鱼社区:摸鱼派! - 技术改变视野 大白话 | Java初学指♂男:“说说初学的误区与死结”( 壹 | 反射与Field ) - 技术改变视野 大白话之耦合性:什么是耦合性和内聚性?用编程语言实例讲解! - 技术改变视野 🎨 适用于 Solo / Bolo 的清新高级主题 —— Sakura | 移植自 WordPress 主题 - 技术改变视野 我在 GitHub 上的开源项目 - 技术改变视野 为IDEA/Git配置GPG密钥,点亮GitHub Verified Commit标识 - 技术改变视野 从 SpringMVC 转为使用 SpringBoot —— 手把手带你使用 Intellij IDEA 最快速地搭建 SpringBoot+MyBatis(无 XML)+Thymeleaf - 技术改变视野 无题 - 技术改变视野 年轻人的第一辆京牌电动车 - 技术改变视野 我们忙碌且漫长的一生,有多久是为自己而活? - 技术改变视野 一个最简单的实例理解Semaphore在Java中的作用 - 技术改变视野 说说《后浪》 - 技术改变视野 离线使用 Google Fonts:让你的网站更精致 | goofoffline 神器,一键下载生成离线字体库! - 技术改变视野 实例带你学会简单的Java Thread多线程 - 技术改变视野 一个实例理解Java的接口(interface)用处与用法 - 技术改变视野 一个实例带你理解JavaBean - 技术改变视野 WebFilter-SpringBoot过滤器注解实例讲解 - 技术改变视野 实例带你搞懂Java多线程&&线程池之(壹):线程池与多线程的关系和区别 - 技术改变视野 实例带你搞懂Java多线程&&线程池之(贰):简单的线程池应用 - 技术改变视野 实例带你获取多线程Thread的返回值之 (壹) - Callable的运行 - 技术改变视野 实例带你获取多线程Thread的返回值之 (贰) - Callable配合线程池返回数据 - 技术改变视野 一个实例理解Java Runnable多线程用处与用法 - 技术改变视野 从零开始OpenSSL之 (壹) - 使用genrsa、rsa、rsautl生成公私钥 - 技术改变视野 从零开始 OpenSSL 之 (贰) - 使用 rsautl 解密文件 - 技术改变视野 大白话之Docker(壹):快速入门&&简单官方实例 - 技术改变视野 大白话之Docker(贰):简单部署一个Tomcat服务并发布内容 - 技术改变视野 大白话之从零讲解DVWA(壹)-SQL注入(SQL Injection) Low Level - 技术改变视野 大白话之从零讲解DVWA(贰)-SQL注入(SQL Injection) Medium/High Level - 技术改变视野 Java日志插件-Slog4J下载 - 技术改变视野 大白话之必会Java Atomic | 线程一点也不安全(一):比自增和synchronized更快速、靠谱的原子操作(调用C语言) - 技术改变视野
Github仅保留指定文件/文件夹当前Commit,删除所有历史记录,...
adlered · 2019-12-09 · via 技术改变视野

前言

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

慌!

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

BFG

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

下载

对于macOS

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

1brew install bfg

使用如下命令使用BFG:

1bfg [命令]

对于Linux和未安装Homebrew的macOS

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

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

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

对于Windows

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

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

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

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

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

Clone项目并清除

将你的Git项目Clone到本地:

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

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

清除特定文件痕迹

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

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

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

手动删除文件

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

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

后语

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

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