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 mastery descubrí git statusque 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, pero git statusaú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 -fresolvió esto. Pude escapar de este extraño estado. Entonces, al menos de alguna manera, los dos no son lo mismo.