git reset --soft : set the HEAD to the intended commit but keep your changes staged from last commits
git reset --mixed : it's same as git reset --soft but the only difference is it un stage your changes from last commits
git reset --hard : set your HEAD on the commit you specify and reset all your changes from last commits including un committed changes.
--soft and --mixed are a bit similar, the only difference is, if you want to keep your changes in staging area use --soft, and if you don't want your changes in staging area use --mixed instead.