# Git Worktree Sample Workflows Real-world examples of using git worktrees with Claude Code for parallel development. ## Table of Contents 1. [Daily Development Workflows](#daily-development-workflows) 2. [Code Review Workflows](#code-review-workflows) 3. [Emergency Hotfix Workflows](#emergency-hotfix-workflows) 4. [Experimentation Workflows](#experimentation-workflows) 5. [Team Collaboration Workflows](#team-collaboration-workflows) 6. [Testing and QA Workflows](#testing-and-qa-workflows) 7. [Advanced Workflows](#advanced-workflows) --- ## Daily Development Workflows ### Workflow 1: Parallel Feature Development **Scenario:** You're working on feature A when a new urgent feature B request comes in. **Steps:** ```bash # Currently working on feature-authentication cd ~/projects/myapp git branch # Shows: * feature-authentication # New request: add dashboard feature # Create worktree instead of switching branches User: "Create a worktree for feature-dashboard" Claude: ✓ Creating worktree... Location: ~/projects/myapp-feature-dashboard Branch: feature-dashboard (new) Dependencies: Installing... ✓ Ready! # Open new Claude Code session cd ~/projects/myapp-feature-dashboard claude # Now have two parallel sessions: # Terminal 1: Working on authentication # Terminal 2: Working on dashboard ``` **Benefits:** - No context switching - No stashing required - Independent testing - Parallel Claude Code sessions --- ### Workflow 2: Bug Investigation During Feature Work **Scenario:** Mid-feature development, you need to investigate a production bug. **Steps:** ```bash # Current state: Working on feature-redesign with uncommitted changes User: "Create a worktree from main for bugfix-login-error" Claude: Checking prerequisites... ⚠️ You have uncommitted changes in current worktree Continue? (Current work won't be affected) User: "yes" Claude: ✓ Creating worktree from main... Location: ~/projects/myapp-bugfix-login-error Branch: bugfix-login-error (from main) ✓ Clean state (no redesign changes) ✓ Ready! # Investigate bug in clean environment cd ~/projects/myapp-bugfix-login-error claude # After fix: git add . git commit -m "fix: resolve login redirect issue" git push # Create PR for bugfix gh pr create --title "Fix: Login redirect error" # Return to feature work cd ~/projects/myapp-feature-redesign # Feature work still intact with all uncommitted changes ``` **Key Points:** - Bug investigated in clean environment - Feature work undisturbed - Easy context switching - Independent commits and PRs --- ## Code Review Workflows ### Workflow 3: PR Review Without Interruption **Scenario:** Teammate requests review while you're coding. **Steps:** ```bash # Current: Working on feature-payments # Teammate: "Can you review PR #456?" User: "Create a worktree for PR 456 review" Claude: Fetching PR #456... PR Branch: feature-user-settings Author: @teammate Creating review worktree... ✓ Location: ~/projects/myapp-review-456 ✓ Checked out: feature-user-settings ✓ Installing dependencies... ✓ Ready for review! # Review in fresh environment cd ~/projects/myapp-review-456 claude # In Claude Code, review changes: # - Read code # - Run tests: npm test # - Check build: npm run build # - Test locally: npm run dev # Leave feedback on GitHub gh pr review 456 --comment --body "LGTM! Tests pass, code looks good." # Clean up review worktree cd ~/projects/myapp User: "Remove the review-456 worktree" Claude: ✓ No uncommitted changes ✓ Removed worktree ✓ Disk space freed: ~850MB # Back to feature work cd ~/projects/myapp-feature-payments # Continue where you left off ``` **Benefits:** - Review in pristine environment - Your work stays untouched - Run tests without affecting your code - Quick cleanup after review --- ### Workflow 4: Compare Multiple PR Approaches **Scenario:** Two PRs propose different solutions to the same problem. **Steps:** ```bash User: "Create worktrees for PR 123 and PR 124 to compare" Claude: Creating comparison worktrees... ✓ PR #123 (approach-a): ~/projects/myapp-pr-123 ✓ PR #124 (approach-b): ~/projects/myapp-pr-124 Installing dependencies in parallel... ✓ Both environments ready! # Test approach A cd ~/projects/myapp-pr-123 npm test npm run benchmark # Test approach B cd ~/projects/myapp-pr-124 npm test npm run benchmark # Compare results: # Approach A: 250ms, cleaner code # Approach B: 180ms, more complex # Decision: Approve approach B, suggest code cleanup # Clean up both User: "Clean up PR worktrees" Claude: ✓ Removed: myapp-pr-123 ✓ Removed: myapp-pr-124 ``` **Use Case:** - A/B testing different implementations - Performance comparison - Side-by-side code review - Data-driven decisions --- ## Emergency Hotfix Workflows ### Workflow 5: Production Hotfix During Feature Development **Scenario:** Critical production bug needs immediate fix. **Steps:** ```bash # Current: Deep in feature development with many uncommitted changes # Alert: Production is down! User: "Create emergency hotfix worktree from production branch" Claude: 🚨 Creating emergency hotfix... ✓ Source: production branch ✓ Location: ~/projects/myapp-hotfix-critical ✓ Branch: hotfix-api-timeout (from production) ✓ Clean slate (production code) ✓ Dependencies: Installing... ✓ Ready in 15 seconds! Next: cd ~/projects/myapp-hotfix-critical && claude # Fix in isolated environment cd ~/projects/myapp-hotfix-critical claude # In Claude Code: # 1. Identify issue # 2. Write fix # 3. Test thoroughly # 4. Deploy git add . git commit -m "hotfix: increase API timeout to 30s" git push origin hotfix-api-timeout # Deploy to production ./deploy-hotfix.sh # Merge to main git checkout main git merge hotfix-api-timeout git push # Merge to feature branch too (avoid conflicts later) cd ~/projects/myapp-feature-redesign git merge main # Clean up hotfix worktree User: "Remove hotfix worktree" Claude: ✓ Hotfix merged to main and feature branch ✓ Production fixed ✓ Removed worktree ✓ Back to feature development ``` **Critical Benefits:** - Instant context switch - Production code isolated - No stashing complex changes - Merge back to all branches easily --- ### Workflow 6: Multiple Simultaneous Hotfixes **Scenario:** Multiple production issues at once. **Steps:** ```bash User: "Create hotfix worktrees for login-bug, payment-error, and api-timeout" Claude: Creating 3 hotfix worktrees from production... ✓ hotfix-login-bug → ~/projects/myapp-hotfix-login ✓ hotfix-payment-error → ~/projects/myapp-hotfix-payment ✓ hotfix-api-timeout → ~/projects/myapp-hotfix-api Installing dependencies in parallel... All ready! Assign to team: Developer 1: cd ~/projects/myapp-hotfix-login Developer 2: cd ~/projects/myapp-hotfix-payment Developer 3: cd ~/projects/myapp-hotfix-api # Each developer works in isolation # Fixes don't conflict # Deploy independently # Merge back when done ``` **Team Benefits:** - Parallel hotfix development - No branch conflicts - Independent testing - Fast resolution --- ## Experimentation Workflows ### Workflow 7: Test Radical Architecture Change **Scenario:** Want to try a major refactor without risking main work. **Steps:** ```bash User: "Create an experiment worktree for testing GraphQL migration" Claude: Creating experiment worktree... ✓ Location: ~/projects/myapp-experiment-graphql ✓ Branch: experiment-graphql-migration ✓ Based on: main ✓ Ready for experimentation! cd ~/projects/myapp-experiment-graphql claude # Implement radical changes: # - Replace REST with GraphQL # - New schema design # - Different data layer # Test the experiment npm test npm run benchmark # Results look promising! # Migrate learnings to feature branch # Or if experiment fails: User: "Remove experiment worktree" Claude: ✓ No harm done to main codebase ✓ Learnings documented ✓ Removed worktree ``` **Experimentation Benefits:** - Safe to fail - No polluting main branch - Easy to abandon - Document learnings --- ### Workflow 8: Performance Comparison **Scenario:** Test if optimization actually improves performance. **Steps:** ```bash User: "Create worktrees for baseline and optimization comparison" Claude: Creating comparison environment... ✓ Baseline: ~/projects/myapp-baseline (current main) ✓ Optimization: ~/projects/myapp-optimized (new branch) # Test baseline cd ~/projects/myapp-baseline npm run benchmark > baseline-results.txt # Implement optimization cd ~/projects/myapp-optimized claude # (Make optimization changes) npm run benchmark > optimized-results.txt # Compare results diff baseline-results.txt optimized-results.txt # Baseline: 450ms avg # Optimized: 220ms avg # Improvement: 51% faster ✓ # Optimization validated - merge it! git checkout main git merge experiment-optimized # Clean up User: "Remove comparison worktrees" ``` --- ## Team Collaboration Workflows ### Workflow 9: Pair Programming Setup **Scenario:** Pair programming with screen sharing. **Steps:** ```bash # Developer 1 (driver) User: "Create pairing worktree for feature-checkout" Claude: ✓ Created: ~/projects/myapp-pairing-checkout ✓ Fresh environment ✓ Ready for pairing session cd ~/projects/myapp-pairing-checkout claude # Share screen, develop together # Commit frequently git add . git commit -m "WIP: checkout flow" git push # Developer 2 (navigator) checks out same worktree later git worktree add ~/projects/myapp-pairing-checkout pairing-checkout cd ~/projects/myapp-pairing-checkout # Continue from where Dev 1 left off # After pairing session User: "Merge pairing work to main feature branch" Claude: ✓ Merged pairing-checkout → feature-checkout ✓ Removed pairing worktree ✓ Clean state ``` --- ### Workflow 10: Integration Testing Multiple Features **Scenario:** Test how three features work together before merging. **Steps:** ```bash # Current state: # - feature-auth (ready) # - feature-dashboard (ready) # - feature-reports (ready) User: "Create integration worktree combining auth, dashboard, and reports" Claude: Creating integration environment... ✓ Base: main branch ✓ Location: ~/projects/myapp-integration-test ✓ Branch: integration-test Merging features... ✓ Merged: feature-auth ✓ Merged: feature-dashboard ✓ Merged: feature-reports Running tests... ⚠️ 2 integration test failures detected # Fix integration issues in integration worktree cd ~/projects/myapp-integration-test claude # Fix conflicts and integration issues git add . git commit -m "fix: resolve feature integration conflicts" # All tests pass! npm test # ✓ All 156 tests passing # Now safe to merge features to main git checkout main git merge feature-auth git merge feature-dashboard git merge feature-reports # Clean up User: "Remove integration test worktree" ``` --- ## Testing and QA Workflows ### Workflow 11: Test Across Multiple Node Versions **Scenario:** Ensure compatibility with Node 16, 18, and 20. **Steps:** ```bash User: "Create worktrees for testing Node 16, 18, and 20" Claude: Creating test environments... ✓ node16: ~/projects/myapp-test-node16 ✓ node18: ~/projects/myapp-test-node18 ✓ node20: ~/projects/myapp-test-node20 # Terminal 1: Node 16 cd ~/projects/myapp-test-node16 nvm use 16 npm install npm test # Result: 3 failures (deprecated API) # Terminal 2: Node 18 cd ~/projects/myapp-test-node18 nvm use 18 npm install npm test # Result: All pass ✓ # Terminal 3: Node 20 cd ~/projects/myapp-test-node20 nvm use 20 npm install npm test # Result: All pass ✓ # Fix Node 16 compatibility in separate worktree cd ~/projects/myapp-test-node16 claude # Fix deprecated API usage # All versions pass! ``` --- ### Workflow 12: Regression Testing **Scenario:** Test new feature doesn't break existing functionality. **Steps:** ```bash # Have feature branch with changes User: "Create worktrees for regression testing: baseline and feature" Claude: Setting up regression test... ✓ Baseline: ~/projects/myapp-baseline (main branch) ✓ Feature: ~/projects/myapp-feature-new-ui # Run tests in baseline cd ~/projects/myapp-baseline npm test -- --coverage > baseline-coverage.txt # Run tests in feature cd ~/projects/myapp-feature-new-ui npm test -- --coverage > feature-coverage.txt # Compare diff baseline-coverage.txt feature-coverage.txt # Baseline: 142/142 tests pass, 87% coverage # Feature: 156/156 tests pass, 89% coverage # Added: 14 new tests ✓ # Coverage improved ✓ # No regressions ✓ # Safe to merge! ``` --- ## Advanced Workflows ### Workflow 13: Dependency Update Testing **Scenario:** Test major dependency update before applying to all branches. **Steps:** ```bash User: "Create worktree to test React 19 upgrade" Claude: ✓ Created: ~/projects/myapp-react19-test ✓ Branch: test-react19-upgrade cd ~/projects/myapp-react19-test claude # Upgrade React npm install react@19 react-dom@19 # Update code for breaking changes # Run tests npm test # Some failures - fix them # Document migration steps # Once stable, apply to feature branches cd ~/projects/myapp-feature-auth npm install react@19 react-dom@19 # Apply same fixes # Repeat for other worktrees ``` --- ### Workflow 14: Database Migration Testing **Scenario:** Test database schema changes safely. **Steps:** ```bash User: "Create worktree for testing database migration" Claude: ✓ Created: ~/projects/myapp-db-migration-test ✓ Using test database cd ~/projects/myapp-db-migration-test # Point to test database echo "DATABASE_URL=postgresql://localhost/myapp_test" > .env # Run migration npm run migrate:up # Test application with new schema npm test npm run dev # Migration successful! # Apply to staging/production # Clean up test worktree ``` --- ## Complete Real-World Example ### Full Development Day with Worktrees ```bash # 9:00 AM - Start day, check tasks git worktree list # Just main worktree # 9:15 AM - Start planned feature User: "Create worktree for feature-notifications" # Work on notifications... # 11:30 AM - Urgent: Review teammate's PR User: "Create worktree for reviewing PR 234" # Review, approve, remove worktree # 1:00 PM - Production bug reported User: "Create hotfix worktree from production" # Fix bug, deploy, merge back # 2:30 PM - Back to notifications feature cd ~/projects/myapp-feature-notifications # Continue where I left off # 3:00 PM - PM requests quick prototype User: "Create experiment worktree for dashboard prototype" # Build prototype, demo to PM # Not approved - remove worktree # 4:00 PM - Finish notifications feature git add . git commit -m "feat: add push notifications" git push # Create PR gh pr create --title "Feature: Push Notifications" # 4:30 PM - Clean up User: "Show my worktrees" Claude: Current worktrees: main (clean) feature-notifications (PR created) hotfix-production (merged and deployed) User: "Clean up merged worktrees" Claude: ✓ Removed: hotfix-production ✓ Kept: feature-notifications (PR pending) # End of day - organized workspace ``` --- ## Summary Git worktrees enable: - **Parallel development** without context switching - **Safe experimentation** without risk - **Fast emergency responses** without disruption - **Efficient code reviews** in isolation - **Comprehensive testing** across environments - **Team collaboration** with shared workflows **Key Principles:** 1. Create worktrees liberally - they're cheap 2. Clean up regularly - avoid clutter 3. Use descriptive names - future you will thank you 4. Document team conventions - consistency matters 5. Automate common patterns - save time **Remember:** Worktrees are a tool. Use them when they add value. Don't overcomplicate simple tasks.