Githubから特定のファイルの履歴を消すメモ

本来、環境変数として設定してプッシュしなければいけなかったファイルを誤ってプッシュしてしまったときなど、そのファイルの履歴はずっと残ってしまうので、APIのKeyやらが全世界に公開されてしまいます。

先日その過ちを消すことに成功したのでメモ。

まず初めに、現時点でのバックアップをローカルに保存する。

これは履歴を消すと言ってもファイル自体が一旦消えてしまうので、その対策。

ローカルで以下のコマンドを。

git filter-branch -f --index-filter 'git rm --ignore-unmatch ファイル名' HEAD

ファイル名が複数あるときはその回数分これを繰り返す。これでgitからファイルごと履歴が消える。

終わったら以下を実行して強制的にpushする。

git push --force origin master

次は履歴とともに消えたファイルの復帰作業。

最初に取っておいたバックアップを使って、消えたファイルを開発環境に戻す。

全部戻し終わったら適当な名前でcommitし、pushする。

これでGithub上では履歴だけ消え、新しくファイルがpushされたように見える。はず。