First things first, let's acknowledge the fact that doing this well does require a certain level of tooling knowledge and practice. That means being comfortable selectively staging changes (git add --patch) and revising your working history as you go (git rebase --interactive).