1. ホーム
  2. git

[解決済み] Git 過去のコミットからファイルを削除するには?

2022-06-25 13:54:18

質問

私は 56f06019 という ID のコミットを持っています(例)。そのコミットで、私は誤って大きなファイル (50Mb) をコミットしてしまいました。別のコミットで私は同じファイルを追加しますが、正しいサイズ(小)です。今、私がクローンするとき、私のレポはあまりにも重いです :( 私のレポのサイズを減らすために、レポの履歴からその大きなファイルを削除するにはどうすればよいですか?

どのように解決するのですか?

の第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 はバックアップも取っているので、リフロッグやガベージコレクトを失効させない限り、レポのサイズはすぐには減らないでしょう。

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