Agregué, comprometí y empujé accidentalmente un archivo binario enorme con mi última confirmación en un repositorio de Git.
¿Cómo puedo hacer que Git elimine los objetos que se crearon para esa confirmación para que mi .git
directorio se reduzca a un tamaño razonable nuevamente?
Editar : Gracias por tus respuestas; Probé varias soluciones. Ninguno funcionó. Por ejemplo, el de GitHub eliminó los archivos del historial, pero el .git
tamaño del directorio no ha disminuido:
$ 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 :-(