Pelo que entendi o git reset --soft uso quando quero voltar um commit mas tenho quase certeza que tudo o que estava no outro commit está certo, pois tudo já fica até no index.
O git reset ou git reset --mixed uso quando que um voltar um commit e deixar tudo o que estava no outro unstaged e alterações no working directory, ou seja, fazer alterações necessárias e colocar no index para comitar.
O git reset --hard é quando o outro commit estava todo zuado e quero eliminá-lo.
Seria isso mesmo?