delete - git rewrite file history
git rm-fatal: pathspec no coincide con ningún archivo (5)
Agregué más de 9000 fotos por accidente a la carpeta de mi proyecto. Y los comprometí. Luego los borré del disco. Comprometido.
Ahora trato de impulsar los cambios al servidor de git. Pero lleva demasiado tiempo e intenta enviar 12 Gb de datos.
Comprobé el tamaño de los archivos en el disco y veo que la carpeta .git
realmente toma 12 Gb.
¿Cómo borrar fotos de allí? Intenté git rm
, pero falla:
❯ git rm public/photos
fatal: pathspec ''public/photos'' did not match any files
Porque ya los borré del disco, pero todavía están en la carpeta .git
.
Traté de agregar public/photos
a .gitignore
:
public/photos/
*.zip
Pero no hay resultado Por supuesto, podría hard reset head
de forma exhaustiva cada vez que no tuviera tantas fotos basura en mi proyecto. Pero desde ese momento me comprometí muchas veces e hice muchos cambios en el código.
En su caso, use git filter-branch
lugar de git rm
.
git rm
eliminará los archivos en el sentido de que ya no serán rastreados por git, pero eso no elimina los antiguos objetos de confirmación que corresponden a esas imágenes, por lo que seguirás atascado al presionar las confirmaciones anteriores que corresponden a 12 GB de imágenes.
Por otro lado, git filter-branch
puede eliminar esos archivos de todas las confirmaciones anteriores, eliminando así la necesidad de presionar alguno de ellos.
Usa el comando
git filter-branch --force --index-filter / ''git rm -r --cached --ignore-unmatch public/photos'' / --prune-empty --tag-name-filter cat -- --all
Una vez completada la rama de filtro, verifique que no se haya perdido ningún archivo no deseado.
Ahora agrega una regla .gitignore
echo public/photos >> .gitignore git add .gitignore && git commit -m "ignore rule for photos"
Ahora haz un empujón
git push -f origin branch
Verifique this , this y this para obtener más ayuda. Para estar más seguro, le sugiero que cree una copia de respaldo del repositorio en su sistema antes de seguir adelante con estas instrucciones.
En cuanto a su mensaje de error orignial, está sucediendo porque ya no los ha seguido usando git rm
, y por lo tanto, git se queja porque no puede eliminar un archivo que no está rastreando. Lea más sobre esto aquí .
Estas cadenas funcionan en mi caso:
-
git rm -r WebApplication/packages
Hubo un git-diálogo de confirmación. Debe elegir la opción "y".
-
git commit -m "blabla"
-
git push -f origin <ur_branch>
Una respuesta muy simple es
Paso 1:
Primero agregue los archivos sin seguimiento a los que desea eliminar usando git add .
o git add <filename>
.
Paso 2:
A continuación, elimínelos fácilmente utilizando el comando git rm -f <filename>
aquí rm = eliminar y -f = forzosamente.
Paso 1
Agregue los nombres de archivo a su archivo .gitignore
.
Paso 2
git filter-branch --force --index-filter /
''git rm -r --cached --ignore-unmatch YOURFILE'' /
--prune-empty --tag-name-filter cat -- --all
Paso 3
git push -f origin branch
Muchas gracias a @mu.
git stash
hizo el trabajo, restauró los archivos que había eliminado utilizando rm
lugar de git rm
.
Primero compré el último hash, pero no creo que sea necesario.