Me he comprometido con la identificación 56f06019 (por ejemplo). En esa confirmación, accidentalmente cometí un archivo grande (50Mb). En otra confirmación agrego el mismo archivo pero en el tamaño correcto (pequeño). Ahora mi repositorio cuando clono es demasiado pesado :( ¿Cómo eliminar ese archivo grande del historial de repositorios para reducir el tamaño de mi repositorio?
113
Respuestas:
El capítulo 9 del libro Pro Git tiene una sección sobre la eliminación de objetos .
Permítanme describir brevemente los pasos aquí:
Como la opción de rebase descrita anteriormente,
filter-branch
es la operación de reescritura. Si tiene un historial publicado, tendrá que--force
impulsar las nuevas referencias.El
filter-branch
enfoque es considerablemente más poderoso que elrebase
enfoque, ya quefilter-branch
también mantiene copias de seguridad, por lo que el tamaño del repositorio no disminuirá de inmediato a menos que expire los reflogs y la recolección de basura:fuente
git filter-branch --force --index-filter 'git rm --ignore-unmatch --cached PathTo/MyFile/ToRemove.dll' -- fbf28b005^..
Entoncesrm --recursive --force .git/refs/original
yrm --recursive --force .git/logs
luego utilicégit prune --expire now
ygit gc --aggressive
Esto funcionó mejor para mí que los pasos exactos enumerados anteriormente. Gracias por incluir el enlace al libro de Git Pro, ya que fue invaluable.Puede usar la herramienta git-extras . El comando obliterate elimina completamente un archivo del repositorio, incluidas las confirmaciones y etiquetas anteriores.
https://github.com/tj/git-extras/blob/master/Commands.md
fuente
Necesitará git rebase en el modo interactivo; vea un ejemplo aquí: ¿Cómo puedo eliminar una confirmación en GitHub? y cómo eliminar confirmaciones antiguas .
Si su confirmación está en HEAD menos 10 confirmaciones:
Después de la edición de su historial, debe presionar el historial "nuevo", debe agregar el
+
to force (consulte la refspec en las opciones de inserción ):Si otras personas ya han clonado su repositorio, les informará, porque acaba de cambiar el historial.
fuente
git push --force
ogit push -f
(que no requiere que las personas conozcan el objetivo de empuje de la rama)git rm
en la ruta.Intenté usar la siguiente respuesta en Windows https://stackoverflow.com/a/8741530/8461756
Las comillas simples no funcionan en Windows, necesita comillas dobles.
Seguir funcionó para mí.
git filter-branch --force --index-filter "git rm --cached --ignore-unmatch PathRelativeRepositoryRoot / bigfile.csv" - --todos
Después de eliminar el archivo grande, pude enviar mis cambios a github master.
fuente
Puede usar un comando simple para eliminar
fuente