git reset --soft HEAD^ I will use this command to "undo" a commit but still be able to see the changes
Rebasing stacks your new branch changes on top of the master you are basing off of, it rewrites the SHA history, and pulls in all commits so they are all on your current branch
Git stash is useful to remove changes to files but still be able to access them and apply them in other places if needed. You can also stash changes and never use them again if they were unwanted.
The primary difference is -soft will keep those changes to your files so you could add them again and commit them, -hard removes the changes completely so you won't have access to them any longer once they are removed