Close

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.

Logotipo de Git
Material relacionado

Chuleta de Git

Logotipo de Bitbucket
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

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.

Gente que colabora utilizando un muro lleno de herramientas

Blog de Bitbucket

Ilustración de Devops

Ruta de aprendizaje de DevOps

Demostraciones de funciones con expertos de Atlassian del Centro de demostraciones

Cómo funciona Bitbucket Cloud con Atlassian Open DevOps

Suscríbete para recibir el boletín de DevOps

Thank you for signing up