Git 永久删除文件

本文介绍了如何使用Git永久删除已提交到远程仓库的敏感文件,包括`git filter-branch`命令的详细解释,以及如何通过修改`.gitignore`文件预防此类问题的发生。提供相关参考资料。
部署运行你感兴趣的模型镜像

简略版

假设要删除的文件是password.txt,运行如下命令:

git filter-branch --force --index-filter 'git \
rm --cached --ignore-unmatch password.txt' \
--prune-empty --tag-name-filter cat -- --all

如果commit已经同步到了github,那么再运行如下命令永久删除远端上的文件。

git push --all --force

不用关心各条命令在干什么,大功告成!

详细版

你如果有耐心或者有兴趣知道上面两条命令是如何工作的,就接着往下读。。。

问题的产生

众所周知,git是用来进行版本控制的,可以恢复到任何commit了的历史状态,对于新手来说,经常会把一些不必要的数据或者敏感数据放到github的公开项目中。比如说我,刚接触git时,每次修改之后都用 git add .图省事,结果一些.class, .zip, .exe文件都被commit了,很烦人。要是不小心提交了密码或者机器的SSH key,就容易产生安全隐患。

一个简单但错误的办法就是使用git rm password.txt 命令删除敏感文件,但是这仅仅是把文件从当前版本中删除,历史版本中仍然有。

下面来说说正确命令的每个选项是什么意思:

git filter-branch --force --index-filter 'git \
rm --cached --ignore-unmatch password.txt' \
--prune-empty --tag-name-filter cat -- --all

filter-branch 是让git重写每一个分支,
--force 假如遇到冲突也让git强制执行,
--index-filter 选项指定重写的时候应该执行什么命令,要执行的命令紧跟在它的后面,在这里就是git rm --cached --ignore-unmatch password.txt ,让git删除掉缓存的文件,如果有匹配的话。

--prune-empty 选项告诉git,如果因为重写导致某些commit变成了空(比如修改的文件全部被删除),那么忽略掉这个commit。

--tag-name-filter 表示对每一个tag如何重命名,重命名的命令紧跟在后面,当前的tag名会从标注输入送给后面的命令,用cat就表示保持tag名不变。
紧跟着的-- 表示分割符,最后的--all 表示对所有的文件都考虑在内。

预防措施

今后为了防止再次不小心将敏感数据提交,可以修改.gitignore文件的内容,凡是成功匹配的文件都不会被git看到,比如在本例中可以在.gitignore后面追加一行”password.txt”

参考资料:

1.stackoverflow上的一个讨论: http://stackoverflow.com/questions/2004024/how-to-permanently-delete-a-file-stored-in-git

2.github官方的指南:https://help.github.com/articles/remove-sensitive-data/

3.关于git filter-branch使用的文档:https://git-scm.com/docs/git-filter-branch

您可能感兴趣的与本文相关的镜像

GPT-SoVITS

GPT-SoVITS

AI应用

GPT-SoVITS 是一个开源的文本到语音(TTS)和语音转换模型,它结合了 GPT 的生成能力和 SoVITS 的语音转换技术。该项目以其强大的声音克隆能力而闻名,仅需少量语音样本(如5秒)即可实现高质量的即时语音合成,也可通过更长的音频(如1分钟)进行微调以获得更逼真的效果

评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值