git rebase --exec is a handy tool for ensuring that each commit is keeping the tests passing.
Ensuring that each commit keeps the tests passing is in service of an ideal I’ve been pursuing. I don’t like submitting commits with the phrase “fix tests” in the description. I like refactoring old functionality or introducing new functionality under green tests.
To do this, I tend to work in two phases lately.
Phase one is an exploratory branch where I’m figuring things out. This is me thrashing through the jungle with a machete.
Phase two is a refined branch, where I’m communicating to others what I figured out. This is more surgical with detailed commits, explaning what changed, why, and alternatives that were considered in my exploratory thrashing branch.
Before submitting phase two for consideration, I’m starting to get in the habit of making sure the tests passed each step of the way.
$ git rebase --exec "bin/rails test" master
That will run the Rails tests on every commit that contributed to the current branch.