Diferença entre `git branch -f <branch_name> <hash>` e `git checkout <branch_name>; git reset --hard <hash> `sob uma árvore de trabalho limpa?

Até agora, eu sempre useigit checkout <branch_name>; git reset --hard <hash> para mover uma ramificação de volta para uma confirmação anterior.

Então me depareiessa questão, mas as respostas e comentários não explicam detalhadamente as diferenças entre eles.

Supondo que eu tenha uma árvore de trabalho limpa, que diferenças internas existem entre

git branch -f <branch_name> <hash>

e

git checkout <branch_name>
git reset --hard <hash>

e essas diferenças, se houver, têm implicações sutis no uso avançado?

questionAnswers(1)

yourAnswerToTheQuestion