Initial commit
This commit is contained in:
181
commands/branch-cleanup.md
Executable file
181
commands/branch-cleanup.md
Executable file
@@ -0,0 +1,181 @@
|
||||
---
|
||||
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
|
||||
Reference in New Issue
Block a user