Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Git ファイルの履歴を完全に削除する

Git ファイルの履歴を完全に削除する

秘密鍵など誤ってコミットしてしまった場合に履歴を完全に削除する手順
参考:6.4 Git のさまざまなツール - 歴史の書き換え

動作確認用にブランチを作成して試す

$ git checkout -b clean-key-file

動作確認用にブランチでgit filter-branchを実行

$ git filter-branch --tree-filter 'rm -f common/key/id_rsa' HEAD  
  Rewrite 856f0bf61e41a27326cdae8f09fe708d679f596f (12/12)
  Ref 'refs/heads/clean-key-file' was rewritten
 

clean-key-fileブランチでid_rsaが履歴から完全に削除されていることを確認する。

全てのブランチを対象にgit filter-branchを実行

$ git filter-branch --tree-filter 'rm -f common/key/id_rsa' HEAD --all

reflogを削除

$ git reflog expire --expire=now --all

git gcを実行

$ git gc --aggressive --prune=now

git push --forceを実行

$ git push --force origin master

※ remote:error: denying non-fast-forward refs/heads/master ... とエラーが出た場合は
下記のようにreceive.denynonfastforwardsをfalseにする。

$ git config receive.denynonfastforwards false
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.