•
every rebased commit gets a new id even when its diff is identical
•
do not rebase commits that others have already based work on
•
--onto moves one specific range to a new base, which is how you drop an obsolete intermediate branch
•
pick, reword, edit, squash, fixup, drop, exec and break, applied top to bottom
•
squash opens both messages for editing, fixup silently discards the second
•
--autosquash reorders fixup! and squash! commits under their targets before the todo list opens
•
resolve, git add, then --continue; --skip drops that commit and --abort unwinds the whole rebase
•
mid-rebase "ours" is the branch you are rebasing onto, which reads backwards to most people
•
--autostash sets dirty work aside before the rebase and restores it afterwards
•
-x "npm test" runs a command after each replayed commit, finding exactly which one broke
•
--force-with-lease refuses if the remote moved since your last fetch, which plain --force would overwrite
•
filter-branch is deprecated and slow; git filter-repo is the recommended history rewriter
•
editing one old commit changes the id of every commit after it