Staging can be a helpful alternative to micro commits. I'll write some code, make some progress, revise, and once I get a small changeset that I'm happy with I stage it. Then I'm free to make a bunch of exploratory changes and the diff will show only those changes, and I can back them out easily. I move forward bit by bit like this until the feature is done then commit.