remove delete commits cleaner git git-filter-branch

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.

  1. Usa el comando

    git filter-branch --force --index-filter / ''git rm -r --cached --ignore-unmatch public/photos'' / --prune-empty --tag-name-filter cat -- --all

  2. Una vez completada la rama de filtro, verifique que no se haya perdido ningún archivo no deseado.

  3. Ahora agrega una regla .gitignore

    echo public/photos >> .gitignore git add .gitignore && git commit -m "ignore rule for photos"

  4. 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:

  1. git rm -r WebApplication/packages

Hubo un git-diálogo de confirmación. Debe elegir la opción "y".

  1. git commit -m "blabla"
  2. 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.