I usually follow thoughtbot’s git protocol when introducing new code into
master, where we rebase interactively (to rebase and squash commits) and then
we merge. But when I don’t use that, I really like GitHub’s squash and merge
But too often, I find that people who use that button tend to miss the middle step (I might even call it the silent step) between squashing and merging. They usually click “Squash and merge” and then immediately hit “Confirm squash and merge”,
In doing so, they forget to write a good cohesive commit message! So what I’ll find is commit messages that look like this one,
Author: Developer <email@example.com> Date: Thurs Dec 20 00:00:00 2018 --0400 Add users to the checkout flow * wip: original implementation * add new routing for guests * hound updates * styling changes * fixed css nesting * change color for primary action * whoops, removed inspects * address feedback * hound again! * pass tests
The commit message above does not tell the reader what changes were introduced or why they were introduced. It is simply a series of work-in-progress commits that were done at a point in time. There might be a commit in there that provides helpful information, but usually there is so much noise that it is hard to find it. And the reader is left to guess at the reason behind them.
This is a crucial opportunity missed! With a good commit message, the author could have communicated the reason behind the changes across space and time!
Wouldn’t it be better if you found this?
Author: Developer <firstname.lastname@example.org> Date: Thurs Dec 20 00:00:00 2018 --0400 Add users to the checkout flow Trello: https://trello.com/z/aYaZaAAa/59-users-checkout-flow What changed? ====================== This commit adds users to the checkout flow. In order to do that we had to add new routing for guests since our current implementation did not account for them. We also updated the colors of primary action buttons to better match the checkout flow. Why are we doing this? ===================== We are introducing users to the checkout flow so that our customers can store items and come back to their shopping cart later. The actual work of persisting the shopping cart is not done here, but this lays the groundwork for all that future work.
Write a cohesive commit message
So next time you hit the “Squash and merge” button, take a breather, and use the text box conveniently located on top of the button to write a nice cohesive commit message before you “Confirm squash and merge”, changing something like this
into something like this,
That is much better. Now you’re ready to “Confirm squash and merge”!