Git 提交了敏感信息怎么办?
这篇文章的由来,由于自己在提交代码的时候不小心把服务器的ip地址,还有数据库的密码给push到github上面去了。那么问题来了,我这个已经是一个月之前的提交的呢,现在还能改吗?别慌答案当然是可以的!
情况1:commit 还没但是还没push的话就很简单了
git commit --amend
这里就不赘述了,有很多现在的解决方案,重点来看情况2.
情况2: 已经是很久之前push上去的代码怎么办?
这里其实也是有两种解决方案的:
-
就是github自己官方支持的修改但是比较麻烦 (我看了眼就放弃了)
-
使用第三方的方法 BFG Repo-Cleaner 官网 , GitHub。
这里他们支持的操作有很多感兴趣或者有需要的可以自己去探索,我这里就直接解释下我自己用的操作。我就是需要把我的IP地址和密码那些在git commit中通过文本替换了就行了,不是直接删除。
- 第一步先去官网下载 jar 包
- 编写一个
replace.txt
的文件用来做替换
这里就是会搜索我所有git commit提交过的文件,会寻找 127.0.0.1
然后全部替换成我的环境变量 ${my_ip}
。下面的两行也就是一样的了寻找 name: admin
然后替换成 name: ${Security_Username}
,个人感觉还是比较好用的。
当然如果你想直接删除这个 127.0.0.1
也是可以的就不用在后面跟随 ==>${my_ip}
这些内容了,而是会直接删除这个commit的内容。
PASSWORD1 # Replace with '***REMOVED***' (default)
PASSWORD2==>examplePass # replace with 'examplePass' instead
PASSWORD3==> # replace with the empty string
regex:password=\w+==>password= # Replace, using a regex
regex:\r(\n)==>$1 # Replace Windows newlines with Unix newlines
这个是引用这位大佬的笔记 DebugTalk
- 上面的文本编写完之后就可以去我们项目的git去运行指令了
java -jar <前面第一步下载的jar文件路径> --replace-text <上一步编写的replace.txt文件路径>
Example:
java -jar /Users/richard/Downloads/bfg-1.14.0.jar --replace-text /Users/richard/Downloads/replace.txt
这一步如果大家运行有问题的话大概率就是你的replace.txt文件有问题,自习去对照修改下 就好了。
-
上一步的指令运行完之后应该会输出一个结果了,注意这个时候还没有改变任何东西,结果的最后应该会提示这么一个指令大家直接复杂粘贴然后运行:
git reflog expire --expire=now --all && git gc --prune=now --aggressive
-
最后一步push很重要,一定要push到GitHub上面去,否则前面全白做。
git push origin --force --all git push origin --force --tags
到这里就大功告成了,刷新下GitHub果然自己一个月前愚蠢的push上去的那些敏感字段就没了!