BattleProgrammerShibata

ある日は誰かと戦い、ある日は何かと戦い、そしてある日は自分と戦うのだろう、そういう生き物。

Twitter の ConsumerSecret やら AccessTokenSecret を GitHub で公開しちゃったらどうする?

世界線を書き換える最強のコマンド filter-branch を鞘から抜きましょう。
過去から現在に至るすべてのコミット履歴を改ざんすることができます。

6.4 Git のさまざまなツール - 歴史の書き換え
https://git-scm.com/book/ja/v1/Git-%E3%81%AE%E3%81%95%E3%81%BE%E3%81%96%E3%81%BE%E3%81%AA%E3%83%84%E3%83%BC%E3%83%AB-%E6%AD%B4%E5%8F%B2%E3%81%AE%E6%9B%B8%E3%81%8D%E6%8F%9B%E3%81%88

歴史の改ざん

今回は当該ファイルの削除、および歴史からの存在抹消を行います。
公開したくないファイルだけれど必要な場合には、バックアップをとっておきましょう。
安全のために、一連の操作を行うことを目的として別途クローンするととても良いです。

$ git filter-branch --tree-filter "rm -f やばいことが書いてあるファイルのパス" HEAD

Rewrite 過去のコミット No がづらづらでてくる(14/14) (45 seconds passed, remaining 0 predicted)
Ref 'refs/heads/master' was rewritten

ローカルの変更が済みました。

フォースの力で世界は再構築される

ローカルの変更をリモートに反映します。 ローカルとリモートで大きく事情が異なってしまったため、普通の push では通りません。
push を強行するため force の力を発揮する時です。もちろん他者と共有しているリポジトリの場合にはちゃんとコンセンサスを取るように…。

$ git push origin master -f

これで万事 OK です。
こんな事故を起こす前に、危険ファイルはさっさと無視リストに追加したり、そもそも危険な情報をハードコーディングしないようにしましょう…。

筆者曰く、

とのことですので、年末の2016年ミスアワード授賞式にこうご期待ください。