Eliminar archivos de un repositorio git después de ignorarlos con .gitignore

  • Por
Cómo eliminar archivos que no deberían estar en el repositorio y que se nos olvidó agregar al .gitignore, desde staging area, antes o después de hacer uno o varios commit.

En el Manual de Git hemos aprendido muchas operativas sencillas y complejas para aprender a usar este sistema de control de versiones. Después de haber abordado mucha información de base, en este artículo vamos a explicar una solución a un problema común a la hora de usar Git.

Se trata de un problema sencillo pero recurrente: borrar archivos de un repositorio GIT, que no deberían estar ahí por el motivo que sea.

Como sabes, existe un archivo llamado .gitignore con el que configuramos los archivos o carpetas que se deben pasar por alto al agregar contenido al repositorio. El típico contenido para meter en el .gitignore es archivos binarios, dependencias, variables de entorno, etc.

Gestionando correctamente el .gitignore conseguimos el efecto deseado, que solo entre en el repositorio aquel material que debería estar ahí. ¿Pero qué se puede hacer cuando hemos agregado al repositorio material que no queríamos trackear? Es decir, queremos que tales archivos continúen en el proyecto, pero no queremos que estén en el repositorio Git por cualquier motivo.

Cuando nos damos cuenta que estamos dando seguimiento a archivos que no deberíamos podemos encontrarnos en dos situaciones que vamos a resolver en este artículo:

  • Que el archivo se haya agregado simplemente al staging area, pero que no se haya hecho commit todavía a estos archivos
  • Que el archivo, o carpeta, esté ya en el repositorio, porque se haya hecho un commit anteriormente. Uno o varios, antes de darnos cuenta que el archivo no debería estar en el repositorio.

Eliminar el seguimiento de archivos que sólo están en staging area

Supongo que sabrás qué es el "Staging Area", el área intermedia de Git donde residen los archivos a los que se está haciendo seguimiento, antes de confirmarlos con un commit. Es algo básico, por lo que si no sabes de lo que estamos hablando te recomiendo la lectura de artículos anteriores como el del Curso de Git.

Cuando los archivos están en el staging area la operativa de eliminar los archivos del seguimiento con Git es bastante sencilla. Basta con lanzar un comando:

git reset HEAD nombre_de_archivo

Si quieres eliminar del staging area todos los ficheros del directorio donde nos encontramos.

git reset HEAD .

Recuerda que luego puedes lanzar un comando "git status" con el que puedes comprobar que los archivos ya no están en seguimiento. "Untracked files: …".

Eliminar del repositorio archivos que ya se han confirmado (se ha hecho commit)

El problema mayor te puede llegar cuando quieras quitarte de enmedio un archivo que hayas confirmado anteriormente. O una carpeta con un conjunto de archivos que no deberían estar en el repositorio.

Una vez confirmados los cambios, es decir, una vez has hecho commit a esos archivos por primera vez, los archivos ya forman parte del repositorio y sacarlos de allí requiere algún paso adicional. Pero es posible gracias a la instrucción "rm". Veamos la operativa resumida en una serie de comandos.

Borrar los archivos del repositorio

El primer paso sería eliminar esos archivos del repositorio. Para eso está el comando "rm". Sin embargo, ese comando tal cual, sin los parámetros adecuados, borrará el archivo también de nuestro directorio de trabajo, lo que es posible que no desees.

Si quieres que el archivo permanezca en tu ordenador pero simplemente que se borre del repostorio tienes que hacerlo así.

git rm --cached nombre_archivo

Si lo que deseas es borrar un directorio y todos sus contenidos, tendrás que hacer algo así:

git rm -r --cached nombre_directorio

El parámetro "--cached" es el que nos permite mantener los archivos en nuestro directorio de trabajo.

Asegurarse que estamos ignorando los archivos con .gitignore

Luego se trataría de asegurarse que nuestros archivos se encuentran correctamente ignorados, para que no los volvamos a meter en el repositorio cuando confirmemos cambios más adelante con commit.

Esto lo tienes que hacer en el archivo .gitignore y ya lo hemos explicado anteriormente, por lo que te recomiendo leer el artículo sobre .gitignore.

Hacer el commit para confirmar los cambios

Una vez hemos quitado del repositorio los archivos que no queremos, y ahora sí están ignorados, tenemos que confirmar los cambios. Esta operación hará que ese archivo o esa carpeta desaparezca del estado actual de la rama de nuestro repositorio.

git commit -m 'Eliminados archivos no deseados'

Enviar esos cambios al repositorio remoto

Como último paso, en el caso que tengas un repositorio remoto donde envías tu código (GitHub o similar), tendrás que trasladar los datos allí.

Esto lo haces con "push", como de costumbre.

git push

O en el caso que tengas que especificar el repositorio remoto y la rama, sería algo como:

git push origin master

Histórico de Git

Ten en cuenta que, aunque en un momento dado elimines archivos de tu repositorio, éstos seguirán en el histórico del repositorio y por tanto se podrán ver en commits anteriores, si es que alguien los busca. Es porque, cuando se confirmaron los cambios por primera vez, ya se indexaron por Git y quedarán registrados en los commits antiguos.

Quitarlo del histórico de commits también podría hacerse, pero ya requiere otra serie de pasos que no vamos a tratar ahora, porque realmente no es una operativa que resulte muy habitual y la dificultad de la acción es bastante superior.

Autor

Miguel Angel Alvarez

Miguel es fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Comenzó en el mundo del desarrollo web en el año 1997, transformando su hobby en su trabajo.

Compartir