Eliminar references de files eliminados físicamente del repository remoto de Git

He eliminado muchos files de mi repository de Git (de muchos directorys diferentes) físicamente.

Todavía puedo ver su reference y si me comprometo con GitHub, los files antiguos todavía están allí.

Necesito eliminar esas references del server de repository remoto (GitHub) y también de mi PC local.

¿Cómo puedo eliminar estas references de los repositorys?

Debe crear un "commit" (la terminología de git para una nueva versión) que tiene esos files eliminados, y luego enviarlo a GitHub. Supongo que si escribe git status , verá algo como esto:

 # On branch master # Changed but not updated: # (use "git add/rm <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) # # deleted: old-file.txt # deleted: another-old-file.txt # deleted: unneeded.c 

Si no hay otros cambios enumerados en el resultado del git status de git status , sería seguro hacerlo:

 git add -u git commit -m "Delete many old files" 

… y luego presionar a GitHub. (El git add -u dice que para el próximo commit cualquier cambio a los files que git está rastreando, que includeía estos files que has eliminado a mano localmente).

Sin embargo, si hay otros cambios enumerados en esa salida, sería mejor intentar algo más preciso, como el sugerido aquí:

  • Elimina todos los files eliminados de "modificados pero no actualizados" en Git

En el futuro, lo mejor es eliminar files con git rm en primer lugar 🙂

Si desea eliminar un file de todas las confirmaciones del repository, necesita git filter-branch . Los ejemplos para usarlo se pueden encontrar en Internet, por ejemplo, en GitHub .

si está hablando de eliminar files y cometer esta eliminación, entonces debería usar

 git rm filename 

Este command eliminará el file y realizará la eliminación para la confirmación de inmediato. Entonces, en este caso, solo necesitará ejecutar

 git commit -m "Remove files" #everything staged will be committed 

Por cierto, lo mismo es cierto cuando quieres mover o renombrar files. No hagas eso usando el command shell move, sino usando "git mv [fuente] [destino]"

Ahora si los has eliminado sin usar "git rm"

deberías escenificarlos primero:

 git add -u git commit -m "Remove files" 

Ahora, si quieres que desaparezcan de toda la historia, entonces no mencionarán esos files, entonces debes usar

 git filter-branch 

Documentación Git filter-branch

Tenga en count que la mayoría de las veces no necesita usar el command filter-branch porque es bastante avanzado. El mejor caso de uso de muestra es si ha confiado el file con alguna información crítica, como su número de tarjeta de crédito y date de vencimiento, y lo ha enviado al repository público. En este caso, cambiar este valor a un valor irrelevante o eliminar un file no es suficiente; debe usar la twig de filter;) … Y rezar para que nadie sea lo suficientemente rápido como para get de su repository;) … Y luego informe su tarjeta de crédito como robado de todos modos …;)

Deben aparecer en su índice como eliminado. Simplemente póngalos en escena y se eliminarán.

Use git add -i para acelerar el process de puesta en escena.