StackExchange に関する多くの回答は、履歴内のすべてのコミットから特定のファイルを次のように削除することを扱っています。
git filter-branch --prune-empty -d /dev/shm/scratch \
--index-filter "git rm --cached -f --ignore-unmatch filename" \
--tag-name-filter cat -- --all
ただし、私のレポには、時間の経過とともに大量のデータがプッシュされていたため、現在の作業ツリーにないすべてのファイルを除外することで、そのサイズを大幅に削減したいと考えています。
man ページから、次の方法でインデックスに対してこれを行うことができます。
git diff --name-only --diff-filter=D -z | xargs -0 git rm --cached
私が収集できるものから、最初の部分は削除されたすべてのファイルの名前を取得し、2 番目の部分はそれらをキャッシュされたバージョンから削除します。
私がうまくいかないのは、rmコマンドのフィルターブランチバージョンを変更して、そのバージョンのインデックスをヘッドと比較するように変更する方法です(したがって、削除されたすべてのファイルを削除します)。
これの目的は、現在の作業ツリーに存在しない、履歴内のすべてのファイルを削除することです。