git rebase is a powerful tool, able to change history itself. With this power however requires great care to avoid needing to
git push --force.
Git rebase comes with very user friendly ways to cancel out of a rebase if something goes wrong or if you become confused:
git rebase --abort
This returns your working tree back to the state before the rebase was started.
One thing that has always made me nervous when using rebase was when I rebased and a conflict occured, so I only kept changes from the HEAD commit which caused the following message:
Applying: change No changes - did you forget to use 'git add'? If there is nothing left to stage, chances are that something else already introduced the same changes; you might want to skip this patch. When you have resolved this problem, run "git rebase --continue". If you prefer to skip this patch, run "git rebase --skip" instead. To check out the original branch and stop rebasing, run "git rebase --abort".
Now I don’t like error messages or messages that look like error messages so this result is quite off-putting. In reality the second line of advice, running
git rebase --skip is not a hacky way out of this situation, it’s the right answer. skipping a commit when it only includes changes from the HEAD commit is perfectly normal. Once I learned this my time with git was much easier.