¿Por qué usar 'git rm' para eliminar un archivo en lugar de 'rm'?

171

En SVN, eliminar algo del sistema de archivos directamente (en lugar de usar svn) creó una gran cantidad de dolores de cabeza.

No he encontrado que esto sea un problema al usarlo git, pero noto que git tiene su propia rmimplementación ( git rm).

¿Cuál es la diferencia entre rmy git rm?

cjm2671
fuente

Respuestas:

253

Si solo lo usa rm, deberá seguirlo con git add <fileRemoved>. git rmhace esto en un solo paso.

También puede usar el git rm --cachedcual eliminará el archivo del índice (preparándolo para su eliminación en la próxima confirmación), pero mantenga su copia en el sistema de archivos local.

Andy
fuente
Buena respuesta. Pude usar git reset --hardy luego hacer un checkout de master para salir del estado de la cabeza separada porque sabía que no tenía ningún cambio no comprometido. Si no ha confirmado sus cambios, es posible que desee hacer un alijo git, pero soy relativamente nuevo en git, así que no sé el comando exacto. Si ha venido aquí en o después de 2014, espero que esta respuesta le haya sido útil.
Eric Hepperle - CodeSlayer2010
@Andy: si usé rm(en lugar de git rm) y eliminé muchos archivos al usarlo, y ahora no quiero gitrastrearlos. ¿Hay alguna manera de revertir los cambios? Quiero gitpisar mi rmcomo eliminado ya que no lo usé git rmen primer lugar.
Chetan Arvind Patil
Sería bueno si esto se explicara claramente en los documentos en línea (puede estar allí, pero obviamente no es obvio o esta pregunta no se habría hecho). Sería bueno para los usuarios saber que no están haciendo nada malo si siguen la ruta rm del sistema operativo. Y hay razones para seguir la ruta del sistema operativo. Por ejemplo, si necesita eliminar un archivo para probar que algo funciona antes de confirmar el cambio, la ruta del sistema operativo es un poco más segura que usar git rm, ya que en el caso de git debe desestabilizar la acción, mientras que en la opción del sistema operativo solo tiene ir a buscar (creo).
bob
12

Eliminar archivos usando rmno es un problema en sí mismo, pero si luego quiere confirmar que el archivo fue eliminado, tendrá que hacerlo de git rmtodos modos, por lo que podría hacerlo de esa manera de inmediato.

Además, dependiendo de su shell, git rmdespués de haber eliminado el archivo, no obtendrá la finalización de la pestaña, por lo que tendrá que deletrear la ruta usted mismo, mientras que si git rmaún existe el archivo, la finalización de la pestaña funcionará normalmente.

hammar
fuente
7

git rmeliminará el archivo del índice y del directorio de trabajo (solo índice si lo usó --cached) para que la eliminación se organice para la próxima confirmación.

manojlds
fuente
4

Sin embargo, si terminas usando rm en lugar de git rm. Puede omitir el git add y confirmar directamente los cambios usando:

git commit -a

Luchador
fuente
3

Eliminar archivos del índice, o del árbol de trabajo y el índice. git rm no eliminará un archivo solo de su directorio de trabajo.

Así es como puede eliminar un archivo usando rm -fy luego eliminarlo de su índice congit rm

$ rm -f index.html
$ git status -s
 D index.html
$ git rm index.html
rm 'index.html'
$ git status -s
D  index.html

Sin embargo, puede hacer todo esto de una sola vez con solo git rm

$ git status -s
$ git rm index.html
rm 'index.html'
$ ls
lib vendor
$ git status -s
D  index.html
basicxman
fuente
2

Cuando use git rm, la eliminación formará parte de su próxima confirmación. Entonces, si desea impulsar el cambio, debe usar git rm

keis
fuente
2

Agregando a la respuesta de Andy, hay una utilidad adicional para git rm:

  1. Seguridad : al hacerlo en git rmlugar de hacerlo rm, Git bloqueará la eliminación si hay una discrepancia entre la HEADversión de un archivo y el índice de ensayo o la versión del árbol de trabajo. Este bloque es un mecanismo de seguridad para evitar la eliminación de cambios en curso.

  2. Salvaguardando : git rm --dry-run. Esta opción es una protección que ejecutará el git rmcomando pero no eliminará los archivos. En su lugar, generará los archivos que habría eliminado.

Joe
fuente