Git: 過去のコミットからファイルを削除するにはどうすればいいですか? 質問する

Git: 過去のコミットからファイルを削除するにはどうすればいいですか? 質問する

たとえば、 ID のコミットがあります56f06019。そのコミットで、誤って大きなファイル (50 MB) をコミットしてしまいました。別のコミットで、同じファイルを適切なサイズ (小さい) で追加しました。これで、クローンを作成するとリポジトリが重くなりすぎます。リポジトリの履歴からその大きなファイルを削除して、リポジトリのサイズを小さくするにはどうすればよいですか?

ベストアンサー1

第9章プロGitこの本にはオブジェクトの削除

ここで手順を簡単に説明します。

git filter-branch --index-filter \
    'git rm --cached --ignore-unmatch path/to/mylarge_50mb_file' \
    --tag-name-filter cat -- --all

前述のリベース オプションと同様に、書き換え操作です。公開履歴がある場合は、新しい参照をプッシュするfilter-branch必要があります。--force

このfilter-branchアプローチは、アプローチよりもかなり強力ですrebase

  • すべてのブランチ/参照を一度に操作できます。
  • タグの名前を即座に変更します
  • ファイルの追加以降に複数のマージコミットがあった場合でも、問題なく動作します。
  • ブランチの履歴内でファイルが複数回追加/削除された場合でも正常に動作します。
  • 新しく無関係なコミットを作成するのではなく、関連するツリーを変更しながらコピーします。つまり、署名されたコミットやコミットノートなどが保持されます。

filter-branchバックアップも保持されるため、reflog とガベージ コレクションを期限切れにしない限り、リポジトリのサイズはすぐには減少しません。

rm -Rf .git/refs/original       # careful
git gc --aggressive --prune=now # danger

おすすめ記事