三种清除Git提交历史的方法

本文介绍三种有效清除Git历史记录中的敏感信息的方法,包括使用filter-branch命令、BFG Repo-Cleaner工具及重新创建远程仓库的策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在项目实际开发过程中,可能由于工作的原因,上传了一些敏感信息,例如测试的账户名与密码,但是后续的工作有需要将项目公开,为了避免信息泄露,那么必须清除Git的提交历史记录,经过测试,大致可以采用如下三种方法。

在这里再次强调一次,现在有很多工具与方法从git的提交历史中爬取敏感信息,所以,即使是删除了原有的文件内容,信息依旧会泄露,例如邮箱密码、登陆密码等。有人可能觉得这些密码泄露了也不要紧,但是你想过了这些密码与你其他账户密码的关联性了吗?所以,一定要时时刻刻保护好自己的敏感数据,说得严重点,你还可能因为自己的一时疏忽而违法,至于因为疏忽丢工作,那时常见的事。

请参见刑法第二百五十三条

国家机关或者金融、电信、交通、教育、医疗等单位的工作人员,违反国家规定,将本单位在履行职责或者提供服务过程中获得的公民个人信息,出售或者非法提供给他人,情节严重的,处三年以下有期徒刑或者拘役,并处或者单处罚金。

1. 采用filter-branch命令

这是网上推荐使用最多的一种方法,具体请参见《Git如何永久删除文件(包括历史记录)》,但这种方法有一个致命的问题,那就是慢,并且非常慢,一般一个提交记录在百次左右的项目,完整执行所有的操作,至少需要一天,并且不方便的地方还在于,需要一个一个地列举所有的文件(可以使用批处理),依次进行操作。

所以,这种方法只适用于清除单个文件的提交历史,并且必须知道所有的文件名。

2. BFG Repo-Cleaner工具

这是来自segmentfault的回答,原文参见《因累积太多无法提交到 github,如何清除历史变更记录?》,工具的安装地址是“https://rtyley.github.io/bfg-repo-cleaner/”,是第一种方法的极大补充。

3. 最直接、暴力与简单的方法

这也是我强烈推荐的,因为暴力、直接、简单,假定原有的远程仓库为A,操作分为四步:
1. 新建另一个远程仓库,命名为B;
2. 将现有的本地代码提交到远程仓库B;
3. 删除现有的远程仓库A;
4. 将远程仓库B命名为A;

结论

清除所有Git版本历史,我认为最简单的方法来自于第三种。

### 如何在 Git清除所有提交记录但保留工作目录的更改 为了实现清空 Git 仓库的提交历史并保留文件更改的目标,可以采用以下方法: #### 方法一:重置整个仓库的历史 可以通过 `git checkout` 和 `git reset` 的组合来完成此目标。以下是具体的操作方式。 1. 创建一个新的孤儿分支 (orphan branch),该分支不会继承任何父级提交记录: ```bash git checkout --orphan new-branch-name ``` 2. 将所有的更改从旧的工作目录复制到新的分支中,并清理掉之前的索引和暂存区的内容: ```bash git add -A ``` 3. 提交这些更改作为初始提交: ```bash git commit -m "Initial commit with current state" ``` 4. 如果希望覆盖原来的主分支或其他指定分支,则强制推送新创建的分支至远程服务器: ```bash git push origin new-branch-name --force ``` 上述过程会完全移除原有的提交历史,仅留下当前的状态作为一个全新的提交[^1]。 #### 方法二:通过过滤分支的方式重新构建历史 如果需要更复杂的处理或者涉及大量文件调整的情况,也可以考虑使用 `filter-branch` 或者 BFG Repo Cleaner 工具来进行操作。不过对于简单的需求来说可能显得过于繁琐[^5]。 需要注意的是,在执行以上任一种方案之前,请务必确认已经备份好重要数据以防万一发生意外丢失情况;另外还要注意团队协作环境下的沟通协调以免影响他人工作进展[^3]。 ```python print("This is an example of Python code block which might be unrelated directly but demonstrates formatting.") ```
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值