Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 85 You must be signed in to star a gist
  • Fork 4 You must be signed in to fork a gist
  • Save ktx2207/3167fa69531bdd6b44f1 to your computer and use it in GitHub Desktop.
Save ktx2207/3167fa69531bdd6b44f1 to your computer and use it in GitHub Desktop.
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