Branch Strategy Advisor
Recommend optimal branching strategies for your project.
Quick Start
Choose strategy based on team and deployment:
-
Small team + continuous deployment → GitHub Flow
-
Large team + scheduled releases → Gitflow
-
Fast iteration + feature flags → Trunk-Based Development
Instructions
Step 1: Assess Project Context
Team Size:
-
Small (1-5 developers)
-
Medium (6-20 developers)
-
Large (20+ developers)
Deployment Frequency:
-
Continuous (multiple times per day)
-
Daily
-
Weekly
-
Scheduled releases (monthly/quarterly)
Release Model:
-
Single production version
-
Multiple versions in production
-
Long-term support versions
-
Rolling releases
Technical Constraints:
-
Feature flags available?
-
Automated testing coverage?
-
CI/CD pipeline maturity?
-
Code review requirements?
Step 2: Select Branching Strategy
GitHub Flow - Best for:
-
Small to medium teams
-
Web applications
-
Continuous deployment
-
Simple workflow needed
Structure:
main (production) ├── feature/user-auth ├── feature/payment-integration └── bugfix/login-error
Workflow:
-
Create feature branch from main
-
Make changes and commit
-
Open pull request
-
Review and test
-
Merge to main
-
Deploy automatically
Pros: Simple, fast, continuous deployment Cons: Requires good CI/CD, no release staging
Gitflow - Best for:
-
Large teams
-
Scheduled releases
-
Multiple versions in production
-
Need for hotfix support
Structure:
main (production) develop (integration) ├── feature/new-dashboard ├── feature/api-v2 ├── release/v2.0 └── hotfix/critical-bug
Workflow:
-
Feature branches from develop
-
Merge features to develop
-
Create release branch from develop
-
Test and fix in release branch
-
Merge release to main and develop
-
Tag release on main
-
Hotfixes from main, merge to main and develop
Pros: Structured, supports multiple versions, clear release process Cons: Complex, slower, more overhead
Trunk-Based Development - Best for:
-
High-performing teams
-
Continuous integration
-
Feature flags available
-
Fast iteration needed
Structure:
main (trunk) ├── short-lived-feature-1 └── short-lived-feature-2
Workflow:
-
Create short-lived branch (< 1 day)
-
Make small changes
-
Merge to main frequently
-
Use feature flags for incomplete features
-
Deploy main continuously
Pros: Fast integration, simple, encourages small changes Cons: Requires discipline, needs feature flags, high test coverage
GitLab Flow - Best for:
-
Environment-based deployments
-
Need for staging
-
Hybrid approach
-
Multiple environments
Structure:
main (development) ├── feature/new-feature ├── staging (staging environment) └── production (production environment)
Workflow:
-
Feature branches from main
-
Merge to main (development)
-
Merge main to staging for testing
-
Merge staging to production for release
-
Hotfixes can go directly to production
Pros: Environment-based, flexible, clear promotion path Cons: More branches to manage, can be slower
Step 3: Define Branch Naming
Recommended conventions:
feature/short-description feature/TICKET-123-description feature/user-auth-jwt
bugfix/short-description bugfix/ISSUE-456-null-pointer bugfix/login-validation
hotfix/critical-issue hotfix/security-patch hotfix/payment-failure
release/version release/v2.0.0 release/2024-Q1
chore/maintenance-task chore/update-dependencies chore/cleanup-logs
Naming rules:
-
Use lowercase with hyphens
-
Include ticket/issue number if applicable
-
Be descriptive but concise
-
Use consistent prefixes
-
Avoid special characters
Step 4: Set Branch Policies
Main/Master Branch:
-
Require pull request reviews (1-2 reviewers)
-
Require status checks to pass
-
Require up-to-date branches
-
Restrict direct pushes
-
Require signed commits (optional)
Develop Branch (if using Gitflow):
-
Require pull request reviews
-
Require CI to pass
-
Allow direct pushes for hotfixes (optional)
Feature Branches:
-
No restrictions
-
Delete after merge
-
Rebase on parent regularly
Release Branches:
-
Restrict to release managers
-
Only bug fixes allowed
-
No new features
Step 5: Define Merge Strategy
Merge Commit - When to use:
-
Want to preserve branch history
-
Multiple commits represent logical units
-
Need audit trail
-
Gitflow workflow
Squash and Merge - When to use:
-
Want clean main branch history
-
Many WIP commits in feature branch
-
Single logical change
-
GitHub Flow workflow
Rebase and Merge - When to use:
-
Want linear history
-
No merge commits
-
Team comfortable with rebasing
-
Trunk-Based Development
Fast-Forward Only - When to use:
-
Strict linear history
-
Small, atomic changes
-
Trunk-Based Development
-
Advanced teams
Strategy Comparison
Strategy Team Size Deployment Complexity Best For
GitHub Flow Small-Medium Continuous Low Web apps, SaaS
Gitflow Medium-Large Scheduled High Enterprise, versioned products
Trunk-Based Any Continuous Medium High-performing teams
GitLab Flow Medium Regular Medium Multi-environment deployments
Common Scenarios
Scenario: Startup with 3 developers
-
Recommendation: GitHub Flow
-
Rationale: Simple, fast, supports continuous deployment
-
Setup: main branch + feature branches + PR reviews
Scenario: Enterprise with 50 developers
-
Recommendation: Gitflow
-
Rationale: Structured, supports multiple releases, clear process
-
Setup: main + develop + feature/release/hotfix branches
Scenario: SaaS with daily deployments
-
Recommendation: Trunk-Based Development
-
Rationale: Fast integration, continuous deployment, small changes
-
Setup: main branch + short-lived features + feature flags
Scenario: Mobile app with app store releases
-
Recommendation: Gitflow or GitLab Flow
-
Rationale: Scheduled releases, need for release branches, testing period
-
Setup: Release branches for app store submissions
Scenario: Open source project
-
Recommendation: GitHub Flow
-
Rationale: Simple for contributors, PR-based, clear process
-
Setup: main branch + fork-based contributions
Migration Strategies
From no strategy to GitHub Flow:
-
Protect main branch
-
Require PR reviews
-
Set up CI/CD
-
Document workflow
-
Train team
From GitHub Flow to Gitflow:
-
Create develop branch from main
-
Update CI to test develop
-
Create first release branch
-
Document new workflow
-
Migrate features to new model
From Gitflow to Trunk-Based:
-
Merge develop to main
-
Remove develop branch
-
Implement feature flags
-
Shorten branch lifetimes
-
Increase deployment frequency
Best Practices
Branch Hygiene:
-
Delete merged branches automatically
-
Limit active branches per developer (2-3)
-
Keep branches short-lived (< 3 days)
-
Sync with parent branch daily
-
Use descriptive names
Code Review:
-
Review within 24 hours
-
Keep PRs small (< 400 lines)
-
Provide constructive feedback
-
Test before approving
-
Use review checklists
CI/CD Integration:
-
Run tests on every push
-
Deploy main automatically (if continuous)
-
Use staging environments
-
Implement rollback mechanisms
-
Monitor deployments
Documentation:
-
Document chosen strategy in README
-
Create workflow diagrams
-
Provide examples
-
Update as strategy evolves
-
Include troubleshooting guide
Advanced
For complex scenarios:
-
Monorepo branching strategies
-
Multi-team coordination
-
Release train models
-
Hotfix procedures
-
Branch protection rules