En mis experimentos no he podido encontrar ninguna diferencia funcional entre¿Cuál es la diferencia entre git reset --hard y git reset --merge
git reset --hard
y
git reset --merge
El uso instrucciones no dan ninguna pista ya sea
--hard reset HEAD, index and working tree
--merge reset HEAD, index and working tree
que suelo usar la opción de modo --hard
understan d cómo eso funciona ¿Cuál es la diferencia entre las opciones --merge
y --hard
?
Saludos, Olly
Tal vez un ejemplo podría ayudar aquí, vamos a usar la siguiente secuencia:
cd git_repo
touch file_one
git add file_one
git commit -m "commit one" # sha1 of 123abc
echo "one" >> ./file_one
git commit -a -m "commit two" # sha1 of 234bcd
echo "two" >> ./file_one
git add . # populate index with a change
echo "three" >> ./file_one # populate working area with a change
Ahora bien, si lo intento
git reset --merge 123abc
consigo
error: Entry 'file_one' not uptodate. Cannot merge.
fatal: Could not reset index file to revision '123abc'
la razón es que tiene file_one cambios tanto en el área de trabajo y el índice
Para remediar esto hago
git add .
git reset --merge 123abc
Esta vez funciona, sin embargo, me sale el mismo resultado que git reset --hard
. El índice está vacío, el área de trabajo está vacía, file_one está vacío, como estaba después del primer commit.
¿Alguien puede encontrar los pasos que ilustran la diferencia?
He leído esos documentos, pero tengo que decir que no les puedo dar mucho sentido. "Restablece el índice para que coincida con el árbol registrado por la confirmación con nombre" Tengo entendido que el índice está vacío después del restablecimiento - operación de cambio, este comentario parece indicar algo más. "y actualiza los archivos que son diferentes entre la confirmación nombrada y la confirmación actual en el árbol de trabajo" ¿dónde están las actualizaciones que se realizan a estos archivos, no aparecen en el índice, se confirman automáticamente? – opsb
Después de 'git reset --merge' tiene índice == , pero solo actualiza esos archivos en funcionamiento que son diferentes entre HEAD (confirmación actual) y (commit nombrado), conservando (algunos de) sus cambios locales . –
En el ejemplo que he descrito anteriormente, descubrí que no podía realizar un reinicio de git, sino cuando tenía cambios en el área de trabajo. ¿Esto es de hecho posible usando diferentes pasos de los que he mostrado arriba? – opsb