Rebase conflicts are not the real problem. Panic is the problem, especially when commits start moving and the history graph looks unfamiliar. This flow keeps your branch recoverable at every step, so you can fix conflicts without sacrificing traceability or making the cleanup harder than the original mistake.
If you are unsure, create safety first, then proceed.
Snapshot Before You Touch Anything
git status
git branch backup/rebase-$(date +%Y%m%d-%H%M)
You now have a rollback point.
Resolve and Continue
# See conflicted files
git diff --name-only --diff-filter=U
# After fixing files
git add <file1> <file2>
git rebase --continue
Repeat until complete.
If You Need to Pause or Exit
# Stop and return to pre-rebase state
git rebase --abort
# Skip a problematic commit (use carefully)
git rebase --skip
Verify Before Push
git log --oneline --graph --decorate -20
git diff origin/main...HEAD
If history is clean and diff is expected, push with lease:
git push --force-with-lease
Use force-with-lease, never force, when rebasing shared history.