Я ответил на это в другом месте, и буду копировать здесь, так как я горжусь этим!
... и без лишних слов, могу я представить вам этот полезный скрипт, git-gc-all, гарантированно удаляющий весь ваш мусор git до тех пор, пока они не могут появиться с дополнительными переменными конфигурации:
git -c gc.reflogExpire=0 -c gc.reflogExpireUnreachable=0 \
-c gc.rerereresolved=0 -c gc.rerereunresolved=0 \
-c gc.pruneExpire=now gc "$@"
Может быть полезен параметр --aggressive.
ПРИМЕЧАНИЕ: это удалит ВСЕ не имеющие ссылки вещи, так что не приходите ко мне плакать, если позже решите, что хотите оставить некоторые из них!
Вам также может понадобиться сначала выполнить что-то вроде этого, о дорогой, мерзавец сложен !!
git remote rm origin
rm -rf .git/refs/original/ .git/refs/remotes/ .git/*_HEAD .git/logs/
git for-each-ref --format="%(refname)" refs/original/ |
xargs -n1 --no-run-if-empty git update-ref -d
Я положил все это в сценарий, здесь:
http://sam.nipl.net/b/git-gc-all-ferocious