git revert <hash> creates a NEW commit that undoes changes. Safe for shared branches.
git reset moves HEAD backward:
--soft — keeps changes staged
--mixed (default) — unstages changes
--hard — discards everything
Rule: Shared branch → git revert. Local only → git reset.
git revert -m 1 <merge-hash> — revert a merge commit (specifies which parent to keep).