Gitで歴史を書き換える
あるリポジトリからディレクトリを消しさる必要があり、gitコマンドを探したところgit filter-branch
というものを見つけました。
ルートディレクトリ直下にあるResources/
というディレクトリをすべてのブランチ、すべてのタグから消し去るメモです。
git filter-branch -f --index-filter 'git rm -rf --ignore-unmatch Resources/' --prune-empty --tag-name-filter cat -- —all
--tree-filter
オプションは、プロジェクトの各チェックアウトに対して指定したコマンドを実行し、結果を再コミットします。
-–index-filter
-–tree-filter のオプションの違いは、ツリーを check out するかどうからしく –index-filter のほうが高速のようなので今回は--index-filterを使いました。
--all
filter-branch をすべてのブランチで実行するために使用
--prune-empty
対象のファイルをcommit logから消した時に生まれるコメントのみの空commitも消してくれるようになるらしい。
--chaced
--chacedオプションがあるとcommit logからだけ削除してワークツリーでは残す。--cachedオプションがないとワークツリーからも消える。今回はワークツリーからも消したいのでつけませんでした。
--tag-name-filter cat
タグの参照を更新してくれるようです。
無事終わったら
git push -f
タグもプッシュ!
git push origin --tags -f
で完了です。
忘れないようにメモ。