There is git-fixup, which provides the 'git fixup' command that makes suggestions to which commit the currently staged changes should be added.
https://github.com/keis/git-fixup
git-fixup will add fixup! commits, so it still needs the mentioned 'git rebase -i --autosquash' afterwards. Usually you do not even need to give it a specific commit if your branch is set to track an upstream branch.