top of page
Writer's pictureTwinkle Jain

Git Branching Strategies

Git is the most popular version control tool that gives software developers power to track, manage, organize and share their code. Git is an open source tool which enables users to collaborate their work and manage the changes efficiently. Therefore, teams need to have a process in place to merge multiple changes at once, reducing number of conflicts.


What is a Branch?

In Git, a Branch is essentially a pointer to latest commit in a given context. As we create new commits in a new branch, Git creates new pointers to track the changes. Git branches can then be seen as a pointer to snapshot of the changes.




What is a Branching strategy?

Branching is a key feature of Git that allows developers to create multiple branches, work on them and then merge them back to the main branch. A Branching strategy is essentially a set of rules that teams adopt while writing, merging and deploying their code using a version control tool. Merging code is one of the most hectic task when the whole team is working on a code, a good branching strategy makes this task easier and keeps the code clean to avoid any code errors.


Guidelines for creating Branches
  • Use feature branches for your work

  • Use a consistent naming convention while naming the branches, name should be able to clearly define the purpose of the branch.

  • Use feature flags to manage long running branches. Feature flags are if statements in the code base that helps team to turn feature on or off.

  • Review and merge code using pull requests. Pull requests let others know about the changes you have pushed to a branch. Once reviewed, the changes can be merged.

  • Keep a high quality and up to date 'main' branch

  • Create release branches for releases

  • Use tags for releases

  • Use proper naming convention for deployments

Below are some most commonly used Branching strategies -


1. Git Flow

'main' and 'develop' are two main branches in this branching strategy.

  • 'main' branch contains production-ready code while 'develop' branch will have the latest development code.

  • 'feature' branches are created from 'develop' branch for each feature that needs to be worked on. Three types of branches for 'feature' can be 'feature', 'release' and 'hotfix' as per the purpose.

  • After development and testing is finished for a feature, the branches are merged back to the 'develop' branch. '

  • develop' branch is merged into 'main' branch when it is tested and ready to be deployed.

Pros

  • Various types of branches make it easy to organize the work.

  • Works very well for large projects with long release cycles.

  • Systematic development process with efficient testing.

  • 'release' branches allow for easy and continuous support for multiple versions of production code.

Cons

  • With increase in size and complexity, it could slow down the development process.

  • Not a good choice when going for CI/CD.

2. Feature Branching

Also known as Github Flow branching strategy, this is a simple one in which every new feature is developed on its own branch.

  • 'main' branch is the stable production-ready branch.

  • 'feature' branches are created from the 'main' branch for developing new features. No 'release' branches.

  • Once the feature is complete after testing, it is merged back into 'main' branch.

Pros

  • Fast and streamlined branching suitable for short production cycles and frequent releases, focussing Agile.

  • Quick identification and resolution of issues.

  • Suitable for CI/CD.

Cons

  • Suitable for small projects and small teams.

  • Not suitable to have multiple versions of code in production at same time.

  • Lack of 'develop' branch make it susceptible to more bugs.

3. Release Branching

Gitlab Flow or Release Branching strategy involves creating new branch for each release of the project. 'release' branch is named as per the deployment environments, like production, pre-production.

  • 'main' branch is the stable production-ready branch.

  • 'feature' branches are created from the 'main' branch for developing new features.

  • Once the feature is complete after testing, it is merged back into 'main' branch.

  • 'release' branches are created from the 'main' branch for final testing before merging into 'main' for production.


Pros

  • Good option for projects with short release cycles.

  • With some modification, suitable for CI/CD.

Cons

  • Challenging to handle multiple 'release' branches at the same time.

  • Lack of structure can lead to messy collaboration.

4. Trunk based development

In this branching strategy, developers work on a single branch ie mostly the 'main' branch and use feature flags to isolate new features until they are ready for release.

  • 'main' branch is used for development where all new features are added and tested using feature flags.

  • when a feature is ready to be release, feature flags are removed.

  • hotfixes go directly into 'main' branch.

Pros

  • Enhances collaboration with better visibility to changes.

  • Greatly suitable for CI/CD, since changes are done more frequently.

  • Less conflicts.

Cons

  • Requires frequent merges.

  • Suitable for experienced developers.

  • Use of feature flags can make some features get missed for release sometimes.

Choosing best suitable Branching Strategy

Product Type and Release Method

Team Size

Collaboration Maturity

Branch mode

All

Small

High

Trunk Based development

Products supporting CI/CD

Medium

Moderate

Feature based or Trunk based development

Products with definite release window and periodic version release

Medium

Moderate

Feature based or Release based development

Products that are demanding for high quality and support CI/CD

Medium

Moderate

Release based development

Products demanding high quality and have a long maintenance for released versions

Large

Moderate

Git Flow

Conclusion

Using a Branching strategy is a key while using Github for project collaboration. It provides a process and makes merges easier with lesser conflicts. There is no perfect strategy and strategy to choose will depend on project and team. Also, a team can start with one strategy and change it later too as per the requirement of the project and team comfort. Whatever strategy is chosen, it should aim to increase team productivity by providing a clear way to organize work.

537 views
bottom of page