How I Git

After Wednesday's email, someone said, "It sounds like you and I use git very differently." So, I wanted to explain what my typical Git workflow is.

I used to use Git Flow, but now, I almost never create a new branch when starting a new task.

I keep my workflow as simple as possible by using trunk-based development and working on a single branch as much as I can.

Before I start, I make sure any uncommitted changes are committed or reset and that the automated tests, static analysis, coding standards checks, etc., are passing so I know I'm starting from a good place.

Then, I start working on the task.

I like to work in small steps and make small, regular commits, but I don't always push each individual commit to the remote repository.

Sometimes, I'll make a number of "work in progress" commits and squash them into one before pushing them.

I want the time between making and pushing the commit to be as short as possible, and I want each commit to be deployable.

If I'm doing test-driven development, I'll typically commit each time a test is passing - whether it's adding a new test or extending one.

I run any tests often whilst writing code to ensure they pass, either using a watch command or a keybinding in Neovim.

I won't push a commit that would cause the code to not work, a test to fail, or block any other (potentially more urgent) changes from being pushed to production.

If I push a commit that breaks the CI pipeline, I'll fix it quickly, which is usually possible as the changes are small.

If not, I'll revert the commit to get back to a deployable state as quickly as possible.

If I'm going to add a feature flag, I'll usually know that in advance and avoid rushing to add one later if a more urgent task comes in.

By keeping each commit in a working and deployable state, a change can be feature flagged and deployed but not activated until the feature flag is enabled.

- Oliver

P.S. If you're creating a new Drupal module, try my free Drupal module template.

Was this interesting?

Sign up here and get more like this delivered straight to your inbox every day.

About me

Picture of Oliver

I'm an Acquia-certified Drupal Triple Expert with 17 years of experience, an open-source software maintainer and Drupal core contributor, public speaker, live streamer, and host of the Beyond Blocks podcast.