Necesito revertir los cambios locales para las implementaciones. (Lo había usado svn revert
para esto en los días de SVN de la vieja escuela).
Y lo estoy usando git reset --hard HEAD
para esto. (También git fetch
y git merge origin/$branch --no-ff
para sincronizar con la rama ascendente).
Pero algunos artículos apuntan git checkout -f
a revertir los cambios.
¿Cuáles son las diferencias clave entre estos comandos? ¿Qué camino es el recomendado?
Respuestas:
Los dos tienen exactamente el mismo efecto. Te recomiendo que elijas la solución con la que te sientas más cómodo.
Pero si en este caso particular el efecto es el mismo, con valores diferentes sería completamente diferente. Básicamente (hay más, vea los temas vinculados) con un reinicio, mueve la rama actual y el HEAD a una confirmación específica, pero con un pago, solo mueve el HEAD. Para obtener más detalles, consulte a continuación.
Recursos:
Sobre el mismo tema:
fuente
Aún no tengo el representante para comentar sobre otras respuestas, solo quería agregar que encontré un caso en el que los dos comandos NO tienen el mismo efecto. Entré en un estado extraño, así que este es definitivamente un caso límite. Esto es lo que sucedió:
Estaba en una sucursal, todo limpio. Revisé el maestro
git checkout master
y descubrígit status
que había cambios en los archivos existentes que no se prepararon para una confirmación (sí, en el código que acabo de verificar). Intenté esconderlo para volver a un estado limpio, el alijo decía haberse completado, perogit status
aún no había cambiado. También lo intentégit reset --hard HEAD
. También informó que se completó con éxito, pero el estado no fue diferente. No pude abortar estos extraños cambios.Sin embargo,
git checkout -f
resolvió esto. Pude escapar de este extraño estado. Entonces, al menos de alguna manera, los dos no son lo mismo.fuente