Git 上提交了敏感数据的处理

613 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

背景

有时候,我们在向 github 提交代码时,不注意,就会把配置文件中的 ip,用户名,密码等敏感信息以明文的方式也推送到 github 上去。( 不要觉得你不会犯这种小问题,网上好多密码都是这样泄漏出去的 )

错误的做法

先在本地修改配置文件,去掉敏感信息,然后在 push 到 github 上。

这样做看似解决了问题,万事大吉了,但是真的万事大吉了吗?别忘了啊,github 可是版本管理工具啊,能看到所有的历史提交记录,这个版本中确实是没有了,但是代码的上一个版本中,密码依旧是存在的啊。所以这种方式根本无法解决问题,而且会产生严重误导,让你误以为解决了。

但是不管怎么样,最好还是及时修改密码等敏感信息。

可选的正确做法1

先在本地进行回滚操作,然后强制提交代码。

#回滚几个版本,n代表回退n个版本,这种方法会丢失n个版本的提交记录
git reset --hard HEAD~n

#强制推送
git push --force

如果 n == 1 的时候还好,否则,这种方法会丢失 n 个版本的提交记录。

为了避免这 n 个版本的提交记录的丢失。

可以先创建一个新分支,这样两个分支有同样的提交,然后在原有分支上 reset,然后将新分支上的那 n 个提交 cherry-pick 到原有分支上,记得 cherry-pick 过来,先不提交,将敏感信息去掉,再提交。

当然这种方式要求这个仓库可以被强制提交代码,有些时候可能会有各种限制,push 时是不支持 -f 的。

\

可选的正确做法2

可以先新创建一个分支,将这个分支的代码 cherry-pick 过去。

将首次提交密码的那次提交记做 : commit A

1.先将 commit A 之前的所有提交,cherry-pick 到 新分支。

2.对于 commit A 之后的每次提交,都单独 cherry-pick 过来,然后先不提交,将敏感信息去掉,再提交。

3.直到全部 cherry-pick 过去。

4.然后用新创建的分支替换这个分支。