Skip to content
All essays
CraftJanuary 28, 202511 min

Git Branching Strategies: Choose the Right Workflow

Compare Git branching strategies. From Git Flow to Trunk-Based Development, find the best approach for your team.

Ü
Ümit Uz
Mobile & Full Stack Developer

Why Branching Strategy Matters

A good branching strategy enables:

  • Parallel development
  • Code review
  • Continuous integration
  • Easy releases

Git Flow

Branch Structure

main (production)
  ↑
develop (development)
  ↑
feature/* (new features)
hotfix/* (production fixes)
release/* (release preparation)

Workflow

  1. 1main: Production-ready code
  2. 2develop: Integration branch for features
  3. 3feature/*: New features from develop
  4. 4release/*: Release preparation from develop
  5. 5hotfix/*: Emergency fixes from main

Commands

bash
# Start feature
git checkout develop
git checkout -b feature/new-feature

# Finish feature
git checkout develop
git merge feature/new-feature

# Start release
git checkout develop
git checkout -b release/1.0.0

# Finish release
git checkout main
git merge release/1.0.0
git tag -a v1.0.0 -m "Release 1.0.0"
git checkout develop
git merge release/1.0.0

# Hotfix
git checkout main
git checkout -b hotfix/critical-bug
# ... fix ...
git checkout main
git merge hotfix/critical-bug
git tag -a v1.0.1 -m "Hotfix 1.0.1"

Pros & Cons

Pros:

  • Clear structure
  • Organized releases
  • Supports parallel development

Cons:

  • Complex for small teams
  • Long-lived branches
  • Merge conflicts

GitHub Flow

Branch Structure

main (always deployable)
  ↑
feature/* (short-lived)

Workflow

  1. 1Create branch from main
  2. 2Make changes
  3. 3Open pull request
  4. 4Code review
  5. 5Merge to main
  6. 6Deploy immediately

Commands

bash
# Create feature branch
git checkout main
git checkout -b feature/add-login

# Make changes and commit
git add .
git commit -m "Add login functionality"

# Push and create PR
git push origin feature/add-login

# After review, merge via PR
# Delete branch
git branch -d feature/add-login

Pros & Cons

Pros:

  • Simple
  • Continuous deployment
  • Short-lived branches
  • Easy to understand

Cons:

  • Requires good CI/CD
  • Frequent deployments
  • No staging environment

Trunk-Based Development

Branch Structure

trunk (main)
  ↑
feature/* (very short-lived, < 1 day)

Workflow

  1. 1Create short-lived feature branch
  2. 2Make changes
  3. 3Open PR immediately
  4. 4Continuous integration on trunk
  5. 5Merge after review (within hours)

Commands

bash
# Create feature branch
git checkout trunk
git checkout -b feature/quick-fix

# Make changes
git commit -am "Quick fix"

# Push PR
git push origin feature/quick-fix

# Merge same day
git checkout trunk
git merge feature/quick-fix
git push

Feature Flags

javascript
// Use feature flags instead of branches
if (featureFlags.isEnabled('new-dashboard')) {
  return <NewDashboard />;
}
return <OldDashboard />;

Pros & Cons

Pros:

  • Minimal merge conflicts
  • Continuous integration
  • Fast feedback
  • Simple

Cons:

  • Requires feature flags
  • High discipline needed
  • Good tests required

Choosing the Right Strategy

Use Git Flow if:

  • Multiple versions in production
  • Scheduled releases
  • Large team
  • Complex release process

Use GitHub Flow if:

  • Continuous deployment
  • Web applications
  • Small to medium team
  • Simple release process

Use Trunk-Based if:

  • High-frequency deployments
  • Strong CI/CD
  • Experienced team
  • Feature flags available

Best Practices

  1. 1Keep branches short-lived: Merge frequently
  2. 2Use pull requests: Enable code review
  3. 3Automate testing: CI on every branch
  4. 4Delete merged branches: Keep repository clean
  5. 5Use branch protection: Protect main branch
  6. 6Write good commit messages: Clear history
  7. 7Tag releases: Easy version tracking

Branch Protection Rules

yaml
# .github/branch-protection.yml
protected_branches:
  main:
    required_status_checks:
      strict: true
      contexts:
        - CI
    required_pull_request_reviews:
      required_approving_review_count: 1
      dismiss_stale_reviews: true
    enforce_admins: true
    allow_deletions: false

Conclusion

Choose a strategy based on your team size, release frequency, and deployment capabilities. The best strategy is the one your team follows consistently.

Related essays

Next essay
Monitoring with Prometheus and Grafana: Complete Guide