/ / “Git rm --cached x” vs “git reset head - x”? - git, git-reset, git-index, git-rm

“Git rm --cached x” vs “git reset head - x”? - git, git-reset, git-index, git-rm

GitRef.org - Básico:

git rm eliminará las entradas de la área de ensayo. Esto es un poco diferente desde git reset HEAD el cual "quiebra" archivos. Por "unstage" quiero decir que revierte El área de preparación de lo que había allí. Antes de que empezáramos a modificar las cosas. git rm por otro lado solo patadas el archivo fuera del escenario por completo, por lo que que no esta incluido en la proxima cometer instantánea, por lo tanto efectivamente eliminándolo.

Por defecto, un git rm file eliminará el archivo del área de almacenamiento por completo y también lo sacará del disco> (el directorio de trabajo). Para dejar el archivo en el directorio de trabajo, puede utilizar git rm --cached.

Pero ¿cuál es exactamente la diferencia entre git rm --cached asd y git reset head -- asd?

Respuestas

168 para la respuesta № 1

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 haces algo como git add file Lo agregas al índice. Y cuando lo cometas, también lo agregas al árbol.

Probablemente te ayude a conocer las tres banderas más comunes en git reset:

reinicio de git [-<mode>] [<commit>]

Esta forma restablece la rama actual a <commit> y posiblemente actualiza el índice (restableciéndolo al árbol de <commit>) y el arbol de trabajo dependiendo de <mode>, que debe ser uno de los siguiendo:
--suave

No toca el archivo de índice ni el árbol de trabajo (pero se restablece) la cabeza a <commit>, al igual que todos los modos hacen). Esto deja todo tu archivos modificados "Los cambios se confirmarán", como lo pondrí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 confirmar) e informa de lo que no se ha hecho 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 arbol de trabajo desde <commit> se descartan.

Ahora, cuando haces algo como git reset HEAD - Lo que realmente estás haciendo es git reset HEAD --mixed y "reiniciará" el índice al estado en que estaba antes de comenzar a agregar archivos / agregar modificaciones al índice (a través de git add ) En este caso, la copia de trabajo y el índice (o la clasificación) estaban sincronizados, pero usted hizo que la CABEZA y el índice estuvieran sincronizados después del restablecimiento.

git rm por otro lado, elimina un archivo del directorio de trabajo y el índice y, cuando te comprometes, el archivo también se elimina del árbol. git rm --cached sin embargo, elimina el archivo solo del índice y lo mantiene en su copia de trabajo. Esto es exactamente lo contrario de git add file En este caso, hiciste que el índice fuera diferente deEl HEAD y el trabajo, en el que el HEAD tiene la versión del archivo previamente confirmada, la copia de trabajo tuvo la última modificación, si la hubiera, o el contenido del HEAD del archivo y usted eliminó el archivo del índice. Una confirmación ahora sincronizará el índice y el árbol y el archivo se eliminará.


63 para la respuesta № 2

Quizás 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"

Ten en cuenta que si no has cambiado nada más, el segundo compromiso no se hace realmente nada.


28 para la respuesta № 3

git rm --cached file será retirar El archivo del escenario. Es decir, cuando confirmes el archivo será eliminado. git reset HEAD -- file simplemente restablecerá el archivo en el área de preparación alIndique dónde se encontraba en la confirmación HEAD, es decir, deshará los cambios que haya hecho desde la última vez que se comprometió. Si ese cambio es que recién se agrega el archivo, entonces serán equivalentes.