git rm
Una pregunta habitual al empezar a trabajar con Git es "¿Cómo le indico a Git que deje de hacer el seguimiento de un archivo (o varios archivos)?". El comando git rm
se usa para eliminar archivos de un repositorio de Git. Se puede considerar que es lo contrario a lo que hace el comando git add.
Descripción general de "git rm"
El comando git rm
se puede usar para eliminar archivos sueltos o un conjunto de ellos. La función principal de git rm
es eliminar los archivos en seguimiento del índice de Git. Además, git rm
se puede usar para eliminar archivos tanto del índice del entorno de ensayo como del directorio de trabajo. No existe la opción de eliminar un archivo solo del directorio de trabajo. Los archivos sobre los que se está trabajando deben ser idénticos a los archivos del HEAD
actual. Si existe alguna discrepancia entre la versión del HEAD
de un archivo y el índice del entorno de ensayo o la versión del árbol de trabajo, Git impedirá que se eliminen los archivos. Se trata de un mecanismo de seguridad para evitar la eliminación de cambios en progreso.
Ten en cuenta que git rm
no elimina ramas. Obtén más información sobre cómo usar las ramas de Git.
Uso
<file>…
Especifica los archivos de destino que se van a eliminar. El valor de opción puede ser un archivo individual, una lista de archivos delimitada por espacios file1 file2 file3
o un patrón global de archivos con caracteres comodín (~./directory/*)
.
-f
--force
La opción -f
se usa para invalidar la comprobación de seguridad que Git realiza para garantizar que los archivos en HEAD
coinciden con el contenido actual del índice del entorno de ensayo y del directorio de trabajo.
Material relacionado
Chuleta de Git
VER LA SOLUCIÓN
Aprende a usar Git con Bitbucket Cloud
-n
--dry-run
La opción "dry run" es una protección que ejecutará el comando git rm
, pero que no elimina realmente los archivos. En realidad, mostrará como resultado los archivos que habría eliminado.
-r
La opción -r
es la abreviatura de "recursive". Al trabajar en modo recursivo, git rm
eliminará el directorio de destino y todo el contenido de dicho directorio.
--
La opción de separador sirve para distinguir de forma explícita entre una lista de nombres de archivo y los argumentos que se van a transmitir a git rm
. Esto resulta útil si algunos de los nombres de archivo tienen una sintaxis que pueda ser errónea para otras opciones.
--cached
La opción "cached" especifica que la eliminación solo debe realizarse en el índice de entorno de ensayo. Los archivos del directorio de trabajo quedarán aparte.
--ignore-unmatch
Esto hace que el comando dé como resultado un estado de sigterm 0 aunque no haya archivos coincidentes. Este es un código de estado de nivel Unix. El código 0 indica una invocación correcta del comando. La opción --ignore-unmatch
puede resultar útil cuando se usa git rm
dentro de un script de shell mayor que deba fallar de forma elegante.
-q
--quiet
La opción "quiet" oculta el resultado del comando git rm
. El comando suele dar como resultado una línea para cada archivo eliminado.
Cómo deshacer el comando git rm
La ejecución del comando git rm
no es una actualización permanente. El comando actualizará el índice del entorno de ensayo y el directorio de trabajo. Estos cambios no se almacenarán hasta que se cree una nueva confirmación y los cambios se añadan al historial de confirmaciones. Esto implica que los cambios se pueden "deshacer" mediante los comandos habituales de Git.
git reset HEAD
Con la opción "reset" se revertirán el índice del entorno de ensayo y el directorio de trabajo actuales a la confirmación HEAD
. De este modo, se anulará el comando git rm
.
git checkout .
El uso de la opción "checkout" tendrá el mismo efecto y restaurará la última versión del archivo de HEAD
.
En caso de que se haya ejecutado git rm
y se haya creado una nueva confirmación que conserve la eliminación, se puede usar git reflog
para encontrar una referencia que sea anterior a la ejecución de git rm
. Obtén más información sobre cómo usar git reflog.
Análisis
El argumento
proporcionado al comando pueden ser rutas exactas, patrones globales de archivos con caracteres comodín o nombres exactos de directorios. El comando solo elimina rutas confirmadas actualmente en el repositorio de Git.
Los patrones globales de archivos con caracteres comodín se usan en los diferentes directorios. Es importante usar con precaución estos patrones. Analiza los siguientes ejemplos: directory/*
y directory*
. En el primer ejemplo, se eliminarán todos los archivos secundarios de directory/
; mientras que, en el segundo, todos los directorios del mismo nivel, como directory1
, directory2
y directory_whatever
, lo cual puede dar lugar a un resultado inesperado.
Ámbito de actuación de "git rm"
El comando git rm
solo actúa en la rama actual. La eliminación solo se aplica al directorio de trabajo y a los árboles de índice del entorno de ensayo. La eliminación del archivo no se almacena en el historial de repositorios hasta que se cree una nueva confirmación.
Por qué usar "git rm" en lugar de "rm"
Un repositorio de Git reconocerá cuándo se ha ejecutado un comando rm
de shell habitual en un archivo en seguimiento. Se actualizará el directorio de trabajo para reflejar la eliminación. Por el contrario, el índice del entorno de ensayo no se actualizará. Habrá que ejecutar un comando git add
adicional en las rutas del archivo eliminado para añadir los cambios al índice del entorno de ensayo. El comando git rm
actúa como acceso rápido en el que se actualizará el directorio de trabajo y el índice del entorno de ensayo con la eliminación.
Ejemplos
git rm Documentation/\*.txt
En este ejemplo se usa un patrón global de archivos con caracteres comodín para eliminar todos los archivos *.txt
que pertenecen al directorio Documentation
y a cualquiera de sus subdirectorios.
Ten en cuenta que el asterisco (*) se escapa con barras oblicuas en este ejemplo. Se trata de una protección que evita que el shell expanda el carácter comodín. Este carácter comodín expande los nombres de rutas de los archivos y subdirectorios dentro del directorio Documentation/
.
git rm -f git-*.sh
En este ejemplo se usa la opción "force" y se dirige a todos los archivos git-*.sh
con caracteres comodín. Esta opción elimina de forma explícita los archivos de destino tanto del directorio de trabajo como del índice del entorno de ensayo.
Cómo eliminar archivos que ya no están en el sistema de archivos
Como se ha indicado anteriormente en la sección "Por qué usar git rm
en lugar de rm
", git rm
es en realidad un comando de conveniencia que combina el comando rm
de shell estándar y git add
para eliminar un archivo del directorio de trabajo y promover dicha eliminación al índice del entorno de ensayo. En los repositorios puede ser complicado en caso de que se hayan eliminado varios archivos solo con el comando rm
de shell estándar.
Si tienes la intención de registrar todos los archivos eliminados de forma explícita dentro de la siguiente confirmación, git commit -a
añadirá todos los eventos de eliminación al índice del entorno de ensayo a modo de preparación para la siguiente confirmación.
No obstante, si quieres eliminar de forma permanente los archivos que han sido eliminados del rm
de shell, usa el siguiente comando:
git diff --name-only --diff-filter=D -z | xargs -0 git rm --cached
Este comando generará una lista de archivos eliminados del directorio de trabajo y canalizará la lista a git rm --cached
, por lo que se actualizará el índice del entorno de ensayo.
Resumen de git rm
git rm
es un comando que actúa en dos de los árboles de gestión de estados internos de Git: el directorio de trabajo y el índice del entorno de ensayo. git rm
se usa para eliminar un archivo de un repositorio de Git. Se trata de un método de conveniencia que combina el efecto del comando predeterminado rm
de shell con git add
. De este modo, se eliminará, en primer lugar, un archivo de destino del sistema de archivos y se añadirá ese evento de eliminación al índice del entorno de ensayo. Este comando es uno de los muchos que se pueden usar para deshacer cambios en Git.
Compartir este artículo
Tema siguiente
Lecturas recomendadas
Consulta estos recursos para conocer los tipos de equipos de DevOps o para estar al tanto de las novedades sobre DevOps en Atlassian.