Pro Git
Pro Git
Hablemos ahora sobre lo que reset hace exactamente cuando es llamado. Manipula directamente estos tres árboles de una manera simple y predecible. Hace hasta tres operaciones básicas.
Lo primero que reset hará es mover a lo que HEAD apunta. Esto no es lo mismo que cambiar HEAD en sí mismo (que es lo que hace checkout), reset mueve la rama a la que HEAD apunta. Esto significa que si HEAD está configurado en la rama master (es decir, estás actualmente en la rama master), ejecutar git reset 9e5e64a comenzará haciendo que master apunte a 9e5e64a.
No importa qué forma de reset invoques con un ``commit, esto es lo primero que siempre intentará hacer. Con reset --soft, simplemente se detendrá allí.
Ahora tómate un segundo para mirar ese diagrama y darte cuenta de lo que sucedió: esencialmente deshizo el último comando git commit. Cuando ejecutas git commit, Git crea una nueva confirmación y mueve la rama a la que apunta HEAD. Cuando haces reset de vuelta a HEAD~ (el padre de HEAD), está volviendo a colocar la rama donde estaba, sin cambiar el Índice o el Directorio de Trabajo. Ahora puedes actualizar el Índice y ejecutar git commit nuevamente para lograr lo que git commit --amend hubiera hecho (ver Cambiando la última confirmación).