egulog

よく忘れるので気づいたことなどのメモ。主にUnity3Dのことについて書いてのメモが多いです

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

で完了です。

忘れないようにメモ。