> if you mess up the original commits are still in your branche's history
git reflog to the rescue! No matter which method you choose, the original commits are not removed. Only the branch pointer moves (use tags)(remove them, when you're done or git gc won't be able to free up space)
BTW fixup > squash. See also git commit --fixup and git rebase --autosquash.