As a senior developer, I rely on Git as my go-to version control tool for all my projects. Over the years, I have honed a strategy inspired by the principles outlined in “A Successful Git Branching Model” by Vincent Driessen. This strategy allows me to efficiently manage work on multiple branches while keeping the codebase organized and stable.
Permanent Branches: Master and Develop
To maintain a structured flow of work, I always have two permanent branches: master and develop. The master branch represents the production-ready code, while the develop branch serves as a staging area for ongoing development.
Handling New Features and Issues
When I encounter a new issue or decide to incorporate a new feature, I follow these guidelines:
-
If the feature is relatively simple, and subsequent commits are unlikely to break the code, I either directly commit on the develop branch or create a quick feature branch and subsequently merge it into develop.
-
If the feature requires multiple commits and may take several days to complete, I create a feature branch dedicated to that particular feature. Once the feature is stable, I merge it back into the develop branch.
Dealing with Critical Production Issues
In situations where the production server requires immediate attention, such as a critical bug fix, I follow these steps:
-
Create a short-lived hotfix branch specifically for addressing the issue.
-
Fix the problem in the hotfix branch, thoroughly test it locally and on a test machine, and then merge it into both the master and develop branches.
Expedited Deployment of Quick Features or Edits
If I need to push a quick feature or edit to the production server, and the develop branch contains unstable code, I can bypass the develop branch under specific circumstances:
-
Create a quick feature branch for the desired feature or edit.
-
Merge the quick feature branch directly into both the master and develop branches.
However, it’s essential to assess the complexity of the feature or edit. If it turns out to be more complicated than initially anticipated, it is advisable to wait and stabilize the code on the develop branch before merging it into master.
Preparing for a Release
As the develop branch continually evolves, it is crucial to prepare it for a release by following these steps:
-
Place the develop branch on a “freeze” to stabilize the code.
-
Thoroughly test the code and verify workflow processes to ensure code quality before merging it into the master branch.
Version Tagging for Easy Rollbacks
To maintain a clear history and facilitate easy rollbacks, I tag every merge of the develop branch or a hotfix branch into the master branch with a version number. These tags serve as reference points, allowing for straightforward retrieval of previous states if any issues arise.
By adhering to this Git workflow strategy, I efficiently manage work on multiple branches, keeping the codebase organized and stable.