remove - git rm cached gitignore
"Git rm--cached x" frente a "git reset head-x"? (3)
Hay tres lugares donde un archivo, por ejemplo, puede ser: el árbol, el índice y la copia de trabajo. Cuando acaba de agregar un archivo a una carpeta, lo está agregando a la copia de trabajo.
Cuando hagas algo como git add file
al índice. Y cuando lo cometes, lo agregas al árbol también.
Probablemente te ayude a conocer los tres indicadores más comunes en el restablecimiento de git:
git reset [-
<mode>
] [<commit>
]Esta forma restablece el encabezado actual a
<commit>
y posiblemente actualiza el índice (restableciéndolo al árbol de<commit>
) y el árbol de trabajo dependiendo de<mode>
, que debe ser uno de los siguientes:
--suaveNo toca el archivo de índice ni el árbol de trabajo en absoluto (pero restablece el encabezado a
<commit>
, al igual que todos los modos). Esto deja todos los archivos modificados "Cambios que se comprometerán", como lo indicaría el estado de git.--mezclado
Restablece el índice pero no el árbol de trabajo (es decir, los archivos modificados se conservan pero no se marcan para la confirmación) e informa lo que no se ha actualizado. Esta es la acción por defecto.
--difícil
Restablece el índice y el árbol de trabajo. Cualquier cambio en los archivos rastreados en el árbol de trabajo desde
<commit>
se descarta.
Ahora, cuando hagas algo como git reset HEAD
, lo que en realidad estás haciendo es git reset HEAD --mixed
y "reiniciará" el índice al estado en que estaba antes de que comenzaras a agregar archivos / agregar modificaciones al índice (a través de git add
) En este caso, la copia de trabajo y el índice (o clasificación) estaban sincronizados, pero usted hizo que HEAD y el índice estuvieran sincronizados después del reinicio.
git rm
por otro lado, elimina un archivo del directorio de trabajo y del índice, y cuando se confirma, el archivo también se elimina del árbol. git rm --cached
sin embargo, elimina el archivo del índice solo y lo mantiene en su copia de trabajo. Esto es exactamente lo opuesto al git add file
En este caso, hizo que el índice sea diferente del HEAD y el que funciona, en el que HEAD tiene la versión previamente comprometida del archivo, la copia de trabajo tenía la última modificación, si corresponde, o el contenido desde HEAD del archivo y eliminó el archivo del índice. Una confirmación ahora sincronizará el índice y el árbol y el archivo se eliminará.
git rm
eliminará las entradas del área de preparación. Esto es un poco diferente degit reset HEAD
que "descomprime" los archivos. Al decir "fuera del escenario" quiero decir que revierte el área de preparación a lo que estaba allí antes de que empezáramos a modificar las cosas.git rm
por otro lado, simplemente patea el archivo fuera del escenario por completo, por lo que no está incluido en la próxima instantánea de confirmación, lo que efectivamente elimina.De forma predeterminada, un
git rm file
eliminará por completo el archivo del área de ensayo y también de su disco> (el directorio de trabajo). Para dejar el archivo en el directorio de trabajo, puede usargit rm --cached
.
Pero, ¿cuál es exactamente la diferencia entre git rm --cached asd
y git reset head -- asd
?
Tal vez un ejemplo ayude:
git rm --cached asd
git commit -m "the file asd is gone from the repository"
versus
git reset HEAD -- asd
git commit -m "the file asd remains in the repository"
Tenga en cuenta que si no ha cambiado nada más , la segunda confirmación no hará nada.
git rm --cached file
eliminará el archivo del escenario. Es decir, cuando confirme el archivo se eliminará. git reset HEAD -- file
simplemente restablecerá el archivo en el área de transición al estado donde estaba en la confirmación HEAD, es decir, deshará cualquier cambio que le haya hecho desde el último commit. Si ese cambio acaba de agregar el archivo, serán equivalentes.