- #99
- #98
- #97
- #96
- #95
- #94
- #93
- #92
- #91
- #90
- #89
- #88
- #87
- #86
- #85
- #84
- #83
- #82
- #81
- #80
- #79
- #78
- #77
- #76
- #75
- #74
- #73
- #72
- #71
- #70
- #69
- #68
- #67
- #66
- #65
- #64
- #63
- #62
- #61
- #60
- #59
- #58
- #57
- #56
- #55
- #54
- #53
- #52
- #51
- #50
- #49
- #48
- #47
- #46
- #45
- #44
- #43
- #42
- #41
- #40
- #39
- #38
- #37
- #36
- #35
- #34
- #33
- #32
- #31
- #30
- #29
- #28
- #27
- #26
如何从 Git 历史中彻底移除机密文件?
有时候不小心推送了不该推送的机密文件到 Git 当中,如何彻底从记录中移除是个问题。以下用环境变量
.env
来解释可以怎么补救。🐑 第一步:亡羊补牢
先把文件加入到
.gitignore
中,避免未来犯下相同的错误。🌿 第二步:表面清洁
执行
git rm -r --cached .env
,把.env
从 Git 当中移除,但这样只是从暂存区移除,并没有从历史记录中移除。r
递归删除目标文件夹中的文件--cached
只从暂存区删除,不会删除实际文件.env
是要删除的文件或文件夹名称
🧽 第三步:深层清理
执行
git filter-branch --index-filter "git rm -rf --cached --ignore-unmatch .env" HEAD
来修改历史。r
递归删除目标文件夹中的文件f
强制删除文件,无须确认--cached
只从暂存区删除,不会删除实际文件ignore-unmatch
忽略如果文件不存在的错误。这个选项保证即使.env
文件在某些提交中不存在,命令也会执行成功- HEAD 表示要对当前最新的提交及其祖先进行过滤操作
✨ 第四步:推送修改
使用
git push --force
来强制覆盖修改过结果到远端。⚠ 补充:任何公开过的敏感信息应当视为外泄,应立即替换不再使用,因此直接替换所有敏感信息而不是修改记录是最安全的做法。近期有遇到不小心把敏感信息推上私有仓库上的问题,就挺适合用这招来剔除。
- #25
- #24
- #23
- #22
- #21
- #20
- #19
- #18
- #17
- #16
- #15
- #14
- #13
- #12
- #11
- #10
- #9
- #8
- #7
- #6
- #5
- #4
- #3
- #2
- #1