本文已参与「新人创作礼」活动,一起开启掘金创作之路。
背景
有时候,我们在向 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.然后用新创建的分支替换这个分支。