Up until now, I have always used git checkout <branch_name>; git reset --hard <hash>
to move a branch back to an earlier commit.
Then I came across this questionthis question, but the answers and comments do not explain in great detail the differences between them.
Assuming I have a clean working tree, what internal differences are there between
git branch -f <branch_name> <hash>
and
git checkout <branch_name>
git reset --hard <hash>
and do such differences, if any, have any subtle implications for advanced usage?