Two (better) options IMO:
'git commit --amend' to fix the message
'git revert' to undo a commit change set
Why do I think these are better? No rewriting of the history! No need to understand HEAD, graph theory, or the other abstractions. And they maintain the forward only design paradigm of git.
We're a place where coders share, stay up-to-date and grow their careers.
We strive for transparency and don't collect excess data.