Nombre

git-rm: elimina archivos del árbol de trabajo y del índice

Sinopsis

gitrm[-f | --force][-n][-r][--cached][--ignore-unmatch][--quiet][--pathspec-from-file=<file>[--pathspec-file-nul]][--][<pathspec>…​]

Descripción

Elimine los archivos que coincidan con la especificación de ruta del índice, o del árbol de trabajo y el índice. git rm no eliminará un archivo solo de su directorio de trabajo. (No hay ninguna opción para eliminar un archivo solo del árbol de trabajo y, sin embargo, mantenerlo en el índice; use /bin/rm si desea hacer eso.) Los archivos que se eliminan deben ser idénticos a la punta de la rama, y ​​no se pueden realizar actualizaciones de su contenido en el índice, aunque ese comportamiento predeterminado se puede anular con el -f opción. Cuando --cached se proporciona, el contenido organizado tiene que coincidir con la punta de la rama o el archivo en el disco, lo que permite que el archivo se elimine solo del índice.

Opciones

Archivos para eliminar. Un nombre de directorio principal (p. Ej. dir para eliminar dir/file1 y dir/file2) para eliminar todos los archivos del directorio y, de forma recursiva, todos los subdirectorios, pero esto requiere -r opción que se dará explícitamente.

El comando elimina solo las rutas conocidas por Git.

Coincidencias de globalización de archivos a través de los límites del directorio. Por lo tanto, dados dos directorios d y d2, hay una diferencia entre usar git rm 'd*' y git rm 'd/*', ya que el primero también eliminará todo el directorio d2.

Para obtener más detalles, consulte la pathspec entrada en glosario[7].

-F
–fuerza

Anule la verificación actualizada.

-norte
– corrida en seco

En realidad, no elimine ningún archivo. En su lugar, solo muestre si existen en el índice y, de lo contrario, el comando los eliminaría.

-r

Permitir la eliminación recursiva cuando se proporciona un nombre de directorio principal.

Esta opción se puede utilizar para separar las opciones de la línea de comandos de la lista de archivos (útil cuando los nombres de archivo pueden confundirse con las opciones de la línea de comandos).

– en caché

Utilice esta opción para desestandarizar y eliminar rutas solo del índice. Los archivos de árbol de trabajo, modificados o no, se dejarán en paz.

–ignore-unmatch

Salga con un estado cero incluso si no hay archivos que coincidan.

-q
–tranquilo

git rm normalmente genera una línea (en forma de rm comando) para cada archivo eliminado. Esta opción suprime esa salida.

–pathspec-from-file =

Pathspec se pasa en en lugar de argumentos de línea de comandos. Si es exactamente - entonces se usa la entrada estándar. Los elementos Pathspec están separados por LF o CR / LF. Los elementos de Pathspec se pueden citar como se explica para la variable de configuración core.quotePath (ver git-config[1]). Ver también --pathspec-file-nul y global --literal-pathspecs.

–pathspec-file-nul

Solo significativo con --pathspec-from-file. Los elementos Pathspec se separan con el carácter NUL y todos los demás caracteres se toman literalmente (incluidas las nuevas líneas y las comillas).

Eliminar archivos que han desaparecido del sistema de archivos

No hay opcion para git rm para eliminar del índice solo las rutas que han desaparecido del sistema de archivos. Sin embargo, dependiendo del caso de uso, hay varias formas de hacerlo.

Usando “git commit -a”

Si tiene la intención de que su próxima confirmación debe registrar todas las modificaciones de los archivos rastreados en el árbol de trabajo y registrar todas las eliminaciones de archivos que se han eliminado del árbol de trabajo con rm (Opuesto a git rm), usar git commit -a, ya que notará y registrará automáticamente todas las eliminaciones. También puede tener un efecto similar sin comprometerse usando git add -u.

Usando “git add -A”

Al aceptar una nueva caída de código para una sucursal de un proveedor, probablemente desee registrar tanto la eliminación de rutas como las adiciones de nuevas rutas, así como las modificaciones de las rutas existentes.

Por lo general, primero eliminaría todos los archivos rastreados del árbol de trabajo con este comando:

git ls-files -z |xargs -0 rm -f

y luego descomprima el código nuevo en el árbol de trabajo. Alternativamente podrías rsync los cambios en el árbol de trabajo.

Después de eso, la forma más sencilla de registrar todas las eliminaciones, adiciones y modificaciones en el árbol de trabajo es:

gitadd -A

Ver git-add[1].

Otras maneras

Si todo lo que realmente quiere hacer es eliminar del índice los archivos que ya no están presentes en el árbol de trabajo (tal vez porque su árbol de trabajo está sucio y no puede usar git commit -a), use el siguiente comando:

gitdiff --name-only --diff-filter=D -z |xargs -0 gitrm --cached

Submódulos

Solo los submódulos que usan un archivo git (lo que significa que fueron clonados con una versión 1.7.8 de Git o más reciente) se eliminarán del árbol de trabajo, ya que su repositorio vive dentro del directorio .git del superproyecto. Si un submódulo (o uno de los anidados dentro de él) todavía usa un directorio .git, git rm moverá el directorio git de submódulos al directorio git de superproyectos para proteger el historial del submódulo. Si existe el submódulo. sección en los gitmodules[5] El archivo también se eliminará y ese archivo se almacenará (a menos que se utilicen –cached o -n).

Un submódulo se considera actualizado cuando el HEAD es el mismo que el registrado en el índice, no se modifican archivos con seguimiento y no hay archivos sin seguimiento que no se ignoren están presentes en el árbol de trabajo de los submódulos. Los archivos ignorados se consideran prescindibles y no impedirán que se elimine el árbol de trabajo de un submódulo.

Si solo desea eliminar el pago local de un submódulo de su árbol de trabajo sin realizar la eliminación, use git-submodule[1]deinit en lugar de. Ver también gitsubmodules[7] para obtener detalles sobre la eliminación de submódulos.

Ejemplos de

git rm Documentation/*.txt

Elimina todo *.txt archivos del índice que están bajo el Documentation directorio y cualquiera de sus subdirectorios.

Tenga en cuenta que el asterisco * se cita del shell en este ejemplo; esto permite a Git, y no al shell, expandir los nombres de ruta de archivos y subdirectorios bajo el Documentation/ directorio.

git rm -f git-*.sh

Debido a que este ejemplo permite que el shell expanda el asterisco (es decir, está enumerando los archivos explícitamente), no elimina subdir/git-foo.sh.

Insectos

Cada vez que una actualización de un superproyecto elimina un submódulo poblado (por ejemplo, cuando se cambia entre confirmaciones antes y después de la eliminación), el pago de un submódulo obsoleto permanecerá en la ubicación anterior. Eliminar el directorio antiguo solo es seguro cuando usa un gitfile, ya que de lo contrario también se eliminará el historial del submódulo. Este paso quedará obsoleto cuando se haya implementado la actualización recursiva del submódulo.

Ver también

git-add[1]