Clean Branches
Commands utilities 172
npx claude-code-templates@latest --command utilities/clean-branches Content
Clean Branches Command
Clean up merged and stale git branches
Instructions
Follow this systematic approach to clean up git branches: $ARGUMENTS
Repository State Analysis
- Check current branch and uncommitted changes
- List all local and remote branches
- Identify the main/master branch name
- Review recent branch activity and merge history
bash# Check current status git status git branch -a git remote -v # Check main branch name git symbolic-ref refs/remotes/origin/HEAD | sed 's@^refs/remotes/origin/@@'Safety Precautions
- Ensure working directory is clean
- Switch to main/master branch
- Pull latest changes from remote
- Create backup of current branch state if needed
bash# Ensure clean state git stash push -m "Backup before branch cleanup" git checkout main # or master git pull origin mainIdentify Merged Branches
- List branches that have been merged into main
- Exclude protected branches (main, master, develop)
- Check both local and remote merged branches
- Verify merge status to avoid accidental deletion
bash# List merged local branches git branch --merged main | grep -v "main\\|master\\|develop\\|\\*" # List merged remote branches git branch -r --merged main | grep -v "main\\|master\\|develop\\|HEAD"Identify Stale Branches
- Find branches with no recent activity
- Check last commit date for each branch
- Identify branches older than specified timeframe (e.g., 30 days)
- Consider branch naming patterns for feature/hotfix branches
bash# List branches by last commit date git for-each-ref --format='%(committerdate) %(authorname) %(refname)' --sort=committerdate refs/heads # Find branches older than 30 days git for-each-ref --format='%(refname:short) %(committerdate)' refs/heads | awk '$2 < "'$(date -d '30 days ago' '+%Y-%m-%d')'"'Interactive Branch Review
- Review each branch before deletion
- Check if branch has unmerged changes
- Verify branch purpose and status
- Ask for confirmation before deletion
bash# Check for unmerged changes git log main..branch-name --oneline # Show branch information git show-branch branch-name mainProtected Branch Configuration
- Identify branches that should never be deleted
- Configure protection rules for important branches
- Document branch protection policies
- Set up automated protection for new repositories
bash# Example protected branches PROTECTED_BRANCHES=("main" "master" "develop" "staging" "production")Local Branch Cleanup
- Delete merged local branches safely
- Remove stale feature branches
- Clean up tracking branches for deleted remotes
- Update local branch references
bash# Delete merged branches (interactive) git branch --merged main | grep -v "main\\|master\\|develop\\|\\*" | xargs -n 1 -p git branch -d # Force delete if needed (use with caution) git branch -D branch-nameRemote Branch Cleanup
- Remove merged remote branches
- Clean up remote tracking references
- Delete obsolete remote branches
- Update remote branch information
bash# Prune remote tracking branches git remote prune origin # Delete remote branch git push origin --delete branch-name # Remove local tracking of deleted remote branches git branch -dr origin/branch-nameAutomated Cleanup Script
bash#!/bin/bash # Git branch cleanup script set -e # Configuration MAIN_BRANCH="main" PROTECTED_BRANCHES=("main" "master" "develop" "staging" "production") STALE_DAYS=30 # Functions is_protected() { local branch=$1 for protected in "${PROTECTED_BRANCHES[@]}"; do if [[ "$branch" == "$protected" ]]; then return 0 fi done return 1 } # Switch to main branch git checkout $MAIN_BRANCH git pull origin $MAIN_BRANCH # Clean up merged branches echo "Cleaning up merged branches..." merged_branches=$(git branch --merged $MAIN_BRANCH | grep -v "\\*\\|$MAIN_BRANCH") for branch in $merged_branches; do if ! is_protected "$branch"; then echo "Deleting merged branch: $branch" git branch -d "$branch" fi done # Prune remote tracking branches echo "Pruning remote tracking branches..." git remote prune origin echo "Branch cleanup completed!"Team Coordination
- Notify team before cleaning shared branches
- Check if branches are being used by others
- Coordinate branch cleanup schedules
- Document branch cleanup procedures
Branch Naming Convention Cleanup
- Identify branches with non-standard naming
- Clean up temporary or experimental branches
- Remove old hotfix and feature branches
- Enforce consistent naming conventions
Verification and Validation
- Verify important branches are still present
- Check that no active work was deleted
- Validate remote branch synchronization
- Confirm team members have no issues
bash# Verify cleanup results git branch -a git remote show originDocumentation and Reporting
- Document what branches were cleaned up
- Report any issues or conflicts found
- Update team documentation about branch lifecycle
- Create branch cleanup schedule and policies
Rollback Procedures
- Document how to recover deleted branches
- Use reflog to find deleted branch commits
- Create emergency recovery procedures
- Set up branch restoration scripts
bash# Recover deleted branch using reflog git reflog --no-merges --since="2 weeks ago" git checkout -b recovered-branch commit-hashAutomation Setup
- Set up automated branch cleanup scripts
- Configure CI/CD pipeline for branch cleanup
- Create scheduled cleanup jobs
- Implement branch lifecycle policies
Best Practices Implementation
- Establish branch lifecycle guidelines
- Set up automated merge detection
- Configure branch protection rules
- Implement code review requirements
Advanced Cleanup Options:
bash
# Clean up all merged branches except protected ones
git branch --merged main | grep -E "^ (feature|hotfix|bugfix)/" | xargs -n 1 git branch -d
# Interactive cleanup with confirmation
git branch --merged main | grep -v "main\|master\|develop" | xargs -n 1 -p git branch -d
# Batch delete remote branches
git branch -r --merged main | grep origin | grep -v "main\|master\|develop\|HEAD" | cut -d/ -f2- | xargs -n 1 git push origin --delete
# Clean up branches older than specific date
git for-each-ref --format='%(refname:short) %(committerdate:short)' refs/heads | awk '$2 < "2023-01-01"' | cut -d' ' -f1 | xargs -n 1 git branch -DRemember to:
- Always backup important branches before cleanup
- Coordinate with team members before deleting shared branches
- Test cleanup scripts in a safe environment first
- Document all cleanup procedures and policies
- Set up regular cleanup schedules to prevent accumulation