Been feeling smug about my git knowledge but had a sudden realization that I can't explain cleanly the ontological distinction between restore/reset/checkout. Do we really need all of them?