17. Eliminar una confirmación de una rama
Objetivos
- Aprender a eliminar las últimas confirmaciones de la rama
Revert
es un poderoso comando de la sección anterior que le permite cancelar cualquier confirmación en el repositorio. Sin embargo, tanto las confirmaciones originales como las canceladas se ven en el historial de la rama (cuando se usa el comando git log
).
A menudo, después de que ya se ha realizado una confirmación, nos damos cuenta de que fue un error. Sería bueno tener una comando deshacer que permite eliminar inmediatamente las confirmaciones incorrectas. Este comando evitaría la aparición de una o más confirmaciones no deseadas en el git log
historial.
01 El comando reset
Ya hemos usado el comando reset
para hacer coincidir la zona de amortiguamiento y la confirmación seleccionada (la confirmación HEAD se usó en la lección anterior).
Cuando se proporciona una referencia de confirmación (es decir, una rama, un hash o un nombre de etiqueta), el reset
comando …
- Sobrescribirá la rama actual para que apunte a la confirmación correcta
- Opcionalmente, restablecerá la zona de amortiguación para que cumpla con la confirmación especificada
- Restablecer opcionalmente el directorio de trabajo para que coincida con la confirmación especificada
02 Verifique nuestro historial
Hagamos un escaneo rápido de nuestro historial de confirmaciones .
Ejecutar:
git hist
Resultado:
Vemos que las dos últimas confirmaciones en esta rama son «Vaya «y» Revertir Vaya «. Eliminémoslos con el comando reset
.
03 Marque esta rama primero
Marquemos la última confirmación con tag, so you can find it after removing a commit(s).
Ejecutar:
git tag oops
04 Restablecer la confirmación de la anterior Oops
En En el registro de historial anterior, la confirmación etiquetada como «v1» está antes de las confirmaciones «Oops» y «Revert Oops». Reiniciemos la rama a ese punto. Como la rama tiene una etiqueta, podemos usar el nombre de la etiqueta en el comando de reinicio (si no tiene una etiqueta, podemos usar el valor hash).
Ejecutar:
git reset --hard v1git hist
Resultado:
Nuestra rama maestra apunta a la confirmación v1 y las confirmaciones «Revert Oops» y «Oops» ya no existen en la rama. El parámetro --hard
hace que el directorio de trabajo refleje la nueva rama.
05 Nada se pierde nunca
¿Qué pasó con las confirmaciones incorrectas? Todavía están en el repositorio. De hecho, todavía podemos referirnos a ellos. Al comienzo de la lección, creamos la etiqueta «oops» para la confirmación cancelada. Echemos un vistazo a todas las confirmaciones.
Ejecutar:
git hist --all
Resultado:
Podemos ver que las confirmaciones incorrectas no se han ido. Ya no aparecen en la rama maestra, pero aún permanecen en el repositorio. Todavía estarían en el repositorio si no los etiquetamos, pero entonces podríamos hacer referencia a ellos solo por sus nombres hash. Las confirmaciones sin referencia permanecen en el repositorio hasta que el sistema ejecuta el software de recolección de basura.
06 Peligros de restablecimiento
Los restablecimientos en ramas locales suelen ser inofensivos. Las consecuencias de cualquier «accidente» se pueden revertir usando la confirmación adecuada.
Sin embargo, otros usuarios que comparten la rama pueden confundirse si la rama se comparte en repositorios remotos.