"git rm x cached x" vs "git reset head-x"?


GitRef.org -Básico:

git rm eliminará las entradas de la área de preparación. Esto es un poco diferente de git reset HEAD que " unstages" file. Por "unstage" quiero decir que revierte el área de preparación a lo que estaba allí antes de empezar a modificar las cosas. git rm por otro lado solo patadas el archivo fuera del escenario por completo, así que que no está incluido en el siguiente confirmar instantánea, por lo tanto de manera efectiva borrándolo.

Por defecto, un git rm file eliminará el archivo desde el área de ensayo completamente y también desde su disco > (el directorio de trabajo). Para dejar el archivo en el directorio de trabajo, puede usar git rm --cached.

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

Author: Nick Volynkin, 2011-04-27

3 answers

Hay tres lugares donde un archivo, por ejemplo, puede estar - el árbol, el índice y la copia de trabajo. Cuando simplemente agrega 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 confirmas, lo agregas al árbol también.

Probablemente te ayudará a conocer los tres indicadores más comunes en git reset:

Git reset [--<mode>] [<commit>]

Este formulario restablece el actual branch head to <commit> and possibly actualiza el índice (restableciéndolo al árbol de <commit>) y el árbol de trabajo dependiendo de <mode>, que debe ser uno de los siguiendo:
--suave

No toca el archivo de índice ni el árbol de trabajo en absoluto (pero restablece la cabeza a <commit>, al igual que todos los modos). Esto deja todo su changed files "Changes to be committed", como diría git status.

--mixto

Restablece el index pero no el árbol de trabajo (es decir, los archivos modificados se conservan pero no se marcan para la confirmación) e informa de lo que no ha sido actualizar. Esta es la acción predeterminada.

--duro

Restablece el índice y el árbol de trabajo. Cualquier cambio en los archivos rastreados en el árbol 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 "restablecerá" el índice al estado que estaba antes de ti comenzó a agregar archivos / agregar modificaciones al índice (a través de git add ) En este caso, la copia de trabajo y el índice ( o estadificación ) estaban sincronizados, pero usted hizo que el ENCABEZADO 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 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 contrario de git add file En este caso, hizo que el índice fuera diferente del HEAD y del working, en él que el HEAD tiene la versión previamente confirmada del archivo, la copia de trabajo tenía la modificación las si alguna o el contenido del HEAD del archivo y eliminó el archivo del index. Una confirmación ahora sincronizará el índice y el árbol y el archivo se eliminará.

 169
Author: manojlds,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-08-29 23:21:16

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"

Ten en cuenta que si no has cambiado nada más, la segunda confirmación no hará nada.

 63
Author: Greg Hewgill,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-04-27 03:19:44

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 preparación al estado donde estaba en la confirmación PRINCIPAL, es decir, deshará cualquier cambio que haya hecho desde la última confirmación. Si ese cambio pasa a ser la adición de nuevo el archivo, entonces serán equivalentes.

 28
Author: yuriks,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-04-27 03:18:48