Как удалить неиспользуемые объекты из репозитория Git?

Я случайно добавил, зафиксировал и отправил огромный двоичный файл с моей последней фиксацией в репозиторий Git.

Как я могу заставить Git удалить объект (ы), который был / был создан для этой фиксации, чтобы мой каталог .git снова уменьшился до нормального размера?

Edit : Спасибо за ваши ответы; Я пробовал несколько решений. Ни один не работал. Например, один из GitHub удалил файлы из истории, но размер каталога .git не уменьшился:

$ BADFILES=$(find test_data -type f -exec echo -n "'{}' " \;)

$ git filter-branch --index-filter "git rm -rf --cached --ignore-unmatch $BADFILES" HEAD
Rewrite 14ed3f41474f0a2f624a440e5a106c2768edb67b (66/66)
rm 'test_data/images/001.jpg'
[...snip...]
rm 'test_data/images/281.jpg'
Ref 'refs/heads/master' was rewritten

$ git log -p # looks nice

$ rm -rf .git/refs/original/
$ git reflog expire --all
$ git gc --aggressive --prune
Counting objects: 625, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (598/598), done.
Writing objects: 100% (625/625), done.
Total 625 (delta 351), reused 0 (delta 0)

$ du -hs .git
174M    .git
$ # still 175 MB :-(
81
задан Ricardo Sanchez-Saez 16 July 2014 в 10:34
поделиться