181 lines
5.9 KiB
Markdown
Executable File
181 lines
5.9 KiB
Markdown
Executable File
---
|
|
allowed-tools: Bash(git branch:*), Bash(git checkout:*), Bash(git push:*), Bash(git merge:*), Bash(gh:*), Read, Grep
|
|
argument-hint: [--dry-run] | [--force] | [--remote-only] | [--local-only]
|
|
description: Use PROACTIVELY to clean up merged branches, stale remotes, and organize branch structure
|
|
|
|
---
|
|
|
|
# Git Branch Cleanup & Organization
|
|
|
|
Clean up merged branches and organize repository structure: $ARGUMENTS
|
|
|
|
## Current Repository State
|
|
|
|
- All branches: !`git branch -a`
|
|
- Recent branches: !`git for-each-ref --count=10 --sort=-committerdate refs/heads/ --format='%(refname:short) - %(committerdate:relative)'`
|
|
- Remote branches: !`git branch -r`
|
|
- Merged branches: !`git branch --merged main 2>/dev/null || git branch --merged master 2>/dev/null || echo "No main/master branch found"`
|
|
- Current branch: !`git branch --show-current`
|
|
|
|
## Task
|
|
|
|
Perform comprehensive branch cleanup and organization based on the repository state and provided arguments.
|
|
|
|
## Cleanup Operations
|
|
|
|
### 1. Identify Branches for Cleanup
|
|
- **Merged branches**: Find local branches already merged into main/master
|
|
- **Stale remote branches**: Identify remote-tracking branches that no longer exist
|
|
- **Old branches**: Detect branches with no recent activity (>30 days)
|
|
- **Feature branches**: Organize feature/* hotfix/* release/* branches
|
|
|
|
### 2. Safety Checks Before Deletion
|
|
- Verify branches are actually merged using `git merge-base`
|
|
- Check if branches have unpushed commits
|
|
- Confirm branches aren't the current working branch
|
|
- Validate against protected branch patterns
|
|
|
|
### 3. Branch Categories to Handle
|
|
- **Safe to delete**: Merged feature branches, old hotfix branches
|
|
- **Needs review**: Unmerged branches with old commits
|
|
- **Keep**: Main branches (main, master, develop), active feature branches
|
|
- **Archive**: Long-running branches that might need preservation
|
|
|
|
### 4. Remote Branch Synchronization
|
|
- Remove remote-tracking branches for deleted remotes
|
|
- Prune remote references with `git remote prune origin`
|
|
- Update branch tracking relationships
|
|
- Clean up remote branch references
|
|
|
|
## Command Modes
|
|
|
|
### Default Mode (Interactive)
|
|
1. Show branch analysis with recommendations
|
|
2. Ask for confirmation before each deletion
|
|
3. Provide summary of actions taken
|
|
4. Offer to push deletions to remote
|
|
|
|
### Dry Run Mode (`--dry-run`)
|
|
1. Show what would be deleted without making changes
|
|
2. Display branch analysis and recommendations
|
|
3. Provide cleanup statistics
|
|
4. Exit without modifying repository
|
|
|
|
### Force Mode (`--force`)
|
|
1. Delete merged branches without confirmation
|
|
2. Clean up stale remotes automatically
|
|
3. Provide summary of all actions taken
|
|
4. Use with caution - no undo capability
|
|
|
|
### Remote Only (`--remote-only`)
|
|
1. Only clean up remote-tracking branches
|
|
2. Synchronize with actual remote state
|
|
3. Remove stale remote references
|
|
4. Keep all local branches intact
|
|
|
|
### Local Only (`--local-only`)
|
|
1. Only clean up local branches
|
|
2. Don't affect remote-tracking branches
|
|
3. Keep remote synchronization intact
|
|
4. Focus on local workspace organization
|
|
|
|
## Safety Features
|
|
|
|
### Pre-cleanup Validation
|
|
- Ensure working directory is clean
|
|
- Check for uncommitted changes
|
|
- Verify current branch is safe (not target for deletion)
|
|
- Create backup references if requested
|
|
|
|
### Protected Branches
|
|
Never delete branches matching these patterns:
|
|
- `main`, `master`, `develop`, `staging`, `production`
|
|
- `release/*` (unless explicitly confirmed)
|
|
- Current working branch
|
|
- Branches with unpushed commits (unless forced)
|
|
|
|
### Recovery Information
|
|
- Display git reflog references for deleted branches
|
|
- Provide commands to recover accidentally deleted branches
|
|
- Show SHA hashes for branch tips before deletion
|
|
- Create recovery script if multiple branches deleted
|
|
|
|
## Branch Organization Features
|
|
|
|
### Naming Convention Enforcement
|
|
- Suggest renaming branches to follow team conventions
|
|
- Organize branches by type (feature/, bugfix/, hotfix/)
|
|
- Identify branches that don't follow naming patterns
|
|
- Provide batch renaming suggestions
|
|
|
|
### Branch Tracking Setup
|
|
- Set up proper upstream tracking for feature branches
|
|
- Configure push/pull behavior for new branches
|
|
- Identify branches missing upstream configuration
|
|
- Fix broken tracking relationships
|
|
|
|
## Output and Reporting
|
|
|
|
### Cleanup Summary
|
|
```
|
|
Branch Cleanup Summary:
|
|
✅ Deleted 3 merged feature branches
|
|
✅ Removed 5 stale remote references
|
|
✅ Cleaned up 2 old hotfix branches
|
|
⚠️ Found 1 unmerged branch requiring attention
|
|
📊 Repository now has 8 active branches (was 18)
|
|
```
|
|
|
|
### Recovery Instructions
|
|
```
|
|
Branch Recovery Commands:
|
|
git checkout -b feature/user-auth 1a2b3c4d # Recover feature/user-auth
|
|
git push origin feature/user-auth # Restore to remote
|
|
```
|
|
|
|
## Best Practices
|
|
|
|
### Regular Maintenance Schedule
|
|
- Run cleanup weekly for active repositories
|
|
- Use `--dry-run` first to review changes
|
|
- Coordinate with team before major cleanups
|
|
- Document any non-standard branches to preserve
|
|
|
|
### Team Coordination
|
|
- Communicate branch deletion plans with team
|
|
- Check if anyone has work-in-progress on old branches
|
|
- Use GitHub/GitLab branch protection rules
|
|
- Maintain shared documentation of branch policies
|
|
|
|
### Branch Lifecycle Management
|
|
- Delete feature branches immediately after merge
|
|
- Keep release branches until next major release
|
|
- Archive long-term experimental branches
|
|
- Use tags to mark important branch states before deletion
|
|
|
|
## Example Usage
|
|
|
|
```bash
|
|
# Safe interactive cleanup
|
|
/branch-cleanup
|
|
|
|
# See what would be cleaned without changes
|
|
/branch-cleanup --dry-run
|
|
|
|
# Clean only remote tracking branches
|
|
/branch-cleanup --remote-only
|
|
|
|
# Force cleanup of merged branches
|
|
/branch-cleanup --force
|
|
|
|
# Clean only local branches
|
|
/branch-cleanup --local-only
|
|
```
|
|
|
|
## Integration with GitHub/GitLab
|
|
|
|
If GitHub CLI or GitLab CLI is available:
|
|
- Check PR status before deleting branches
|
|
- Verify branches are actually merged in web interface
|
|
- Clean up both local and remote branches consistently
|
|
- Update branch protection rules if needed |