Sitemap

Enterprise Version Control

4 min readMar 11, 2026

--

When we start working with Git, the workflow is usually very simple. Most projects begin with just a main branch and maybe a few feature branches. This works perfectly fine for small teams.

However, once a project grows and multiple developers start working together, things become more complicated. Teams need to manage development, testing environments, production releases, and sometimes even long-term support for older versions.

Without a clear branching strategy, Git quickly becomes messy. Merge conflicts increase, releases become risky, and it becomes difficult to track what code is actually running in production.

In this article, I’ll walk through a practical enterprise Git workflow that helps teams manage development, releases, and production in a structured way.

Press enter or click to view image in full size
Enterprise merging techniques

Why Enterprises Need a Branching Strategy

In larger systems, software usually passes through several stages before reaching production. For example:

  • Developers build features
  • The code is integrated and tested
  • QA validates the release
  • The release is deployed to production

If everything happens directly on a single branch, it becomes very hard to control these stages.

That’s why enterprise teams introduce multiple branches, each with a clear responsibility.

Press enter or click to view image in full size

Feature Development

Development begins with feature branches, which are usually tied to Jira stories or tasks. For example:

feature/story-0001
feature/task-0004

Each developer creates a feature branch from the dev branch and works independently.

dev
└── feature/story-0001

Once the feature is complete, a pull request is opened and the branch is merged back into dev.This approach allows multiple developers to work in parallel without interfering with each other’s work.

Handling Development Bugs

Sometimes bugs are discovered while the system is still under development. In those cases, a bugfix branch is created. Example:

bugfix/bug-0005

This branch is also created from the dev branch.

dev
└── bugfix/bug-0005

After fixing the issue and completing the review process, the branch is merged back into dev.Keeping fixes in separate branches helps maintain a clean development history.

The Development Branch

The dev branch acts as the integration branch for all ongoing work. Every completed feature or bug fix eventually merges into this branch.

feature/*
bugfix/*
↓
dev

The dev branch usually represents the latest working version of the application. It may not be fully stable yet, but it contains all the current development work.

Many teams deploy the dev branch automatically to a development environment for continuous integration testing.

Preparing a Release

When the team decides that the current development work is ready for testing, a release branch is created.

Get Pressnave Kiruparaj’s stories in your inbox

Join Medium for free to get updates from this writer.

Example:

release/v1.0

This branch is created from the dev branch.

dev → release/v1.0

At this stage, the goal is to stabilize the release.

That means:

  • No new features are added
  • Only bug fixes are allowed
  • QA teams perform testing

This step is very important because it protects production from unstable code.

Deploying to Production

Once testing is complete and the release is approved, the release branch is merged into the main branch.

release/v1.0 → main

The main branch always represents the production version of the application. Any deployment to production should come from this branch.

Tagging the Release

After deploying to production, the release is tagged. Example:

v1.0

Tags make it easy to identify which version of the code corresponds to a production release.

They are extremely useful for:

  • auditing releases
  • debugging issue
  • rolling back deployments

Handling Production Issues

Even with careful testing, issues sometimes appear in production. When this happens, the team creates a hotfix branch directly from the main branch. Example:

hotfix/bug-0006
main
└── hotfix/bug-0006

Once the fix is completed, the changes are merged back into:

  • main
  • release
  • dev

This ensures that the fix is applied everywhere and does not reappear in future releases.

Long Term Support (LTS) for previous versions

After version v1.0 is released and tagged, the team creates a dedicated support/v1.0 branch to maintain long-term support for that release.

When bugs or security issues are discovered, fixes are implemented using bugfix branches created from the support branch. After the fix is merged back, a new patch version such as v1.0.1 is tagged.

This approach allows organizations to maintain older versions while continuing development on newer releases.

Press enter or click to view image in full size
LTS for previous version

A clear Git branching strategy helps teams manage development, releases, and production more safely and efficiently. By separating feature development, release preparation, and long-term support, teams can work in parallel while keeping production stable. With the right structure in place, version control becomes not just a tool for storing code, but a foundation for building reliable and maintainable software at scale.

--

--

Pressnave Kiruparaj
Pressnave Kiruparaj

Written by Pressnave Kiruparaj

0 followers

Software Architect