Diferencia entre `git branch -f <nombre de rama> <hash>` y `git checkout <nombre de rama>; git reset --hard <hash> `debajo de un árbol de trabajo limpio?
Hasta ahora, siempre he usadogit checkout <branch_name>; git reset --hard <hash>
para mover una rama de nuevo a una confirmación anterior.
Entonces me encontréesta pregunta, pero las respuestas y comentarios no explican con gran detalle las diferencias entre ellos.
Suponiendo que tengo un árbol de trabajo limpio, qué diferencias internas hay entre
git branch -f <branch_name> <hash>
y
git checkout <branch_name>
git reset --hard <hash>
¿Y tales diferencias, si las hay, tienen implicaciones sutiles para el uso avanzado?