世界線を書き換える最強のコマンド 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年ワーストミスアワードにノミネートしておく。
— バトルプログラマー柴田智也(求職中) (@tomoya_shibata) 2016, 1月 31
とのことですので、年末の2016年ミスアワード授賞式にこうご期待ください。