I make a lot of articulations on branches as I'm going, so I might start stashing those instead of making new random branches with then on it.
From my understanding, a rebase takes commits from a branch 1 by 1 and then attaches them to a different commit in chronological order, but giving them new identifiers and timestamps. I believe a merge sort of mushes all of the commits together, going by timestamp.
I think I will use it for articulations and pratice branches - code/comments that I want to do that depends on code in a project, but not code that I want to merge.
I didn't get that far, but it sounds like soft keeps your changes and hard wipes your changes. Soft will only reset your commit history,