Initial commit
This commit is contained in:
206
commands/worktree-cleanup.md
Normal file
206
commands/worktree-cleanup.md
Normal file
@@ -0,0 +1,206 @@
|
||||
# Worktree Cleanup Command
|
||||
|
||||
**Expert Command** - Manually clean up development track worktrees.
|
||||
|
||||
## Command Usage
|
||||
|
||||
```bash
|
||||
/multi-agent:worktree cleanup # Clean up all worktrees
|
||||
/multi-agent:worktree cleanup 01 # Clean up specific track
|
||||
/multi-agent:worktree cleanup --all # Clean up worktrees AND delete branches
|
||||
```
|
||||
|
||||
## Warning
|
||||
|
||||
This command is destructive. Use with caution.
|
||||
|
||||
## Your Process
|
||||
|
||||
### Step 1: Load State and Validate
|
||||
|
||||
1. Load state file
|
||||
2. Verify worktree mode enabled
|
||||
3. If specific track, verify track exists
|
||||
4. Check if tracks are complete (warning if not)
|
||||
|
||||
### Step 2: Safety Checks
|
||||
|
||||
For each worktree to be removed:
|
||||
|
||||
```bash
|
||||
cd "$worktree_path"
|
||||
|
||||
# Check for uncommitted changes
|
||||
if [ -n "$(git status --porcelain)" ]; then
|
||||
echo "❌ ERROR: Uncommitted changes in $worktree_path"
|
||||
echo " Please commit or stash changes first"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check if pushed to remote
|
||||
if git status | grep "Your branch is ahead"; then
|
||||
echo "⚠️ WARNING: Unpushed commits in $worktree_path"
|
||||
echo " Recommend pushing before cleanup"
|
||||
read -p "Continue anyway? (y/N): " confirm
|
||||
if [ "$confirm" != "y" ]; then
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
```
|
||||
|
||||
### Step 3: Remove Worktrees
|
||||
|
||||
For each worktree:
|
||||
|
||||
```bash
|
||||
cd "$MAIN_REPO"
|
||||
|
||||
echo "Removing worktree: $worktree_path"
|
||||
git worktree remove "$worktree_path"
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "✓ Removed: $worktree_path"
|
||||
else
|
||||
echo "❌ Failed to remove: $worktree_path"
|
||||
echo " Try: git worktree remove --force $worktree_path"
|
||||
fi
|
||||
```
|
||||
|
||||
### Step 4: Remove Empty Directory
|
||||
|
||||
```bash
|
||||
if [ -d ".multi-agent" ] && [ -z "$(ls -A .multi-agent)" ]; then
|
||||
rmdir .multi-agent
|
||||
echo "✓ Removed empty .multi-agent/ directory"
|
||||
fi
|
||||
```
|
||||
|
||||
### Step 5: Optionally Delete Branches
|
||||
|
||||
If `--all` flag:
|
||||
|
||||
```bash
|
||||
for track in tracks:
|
||||
branch = "dev-track-${track:02d}"
|
||||
|
||||
# Safety: verify branch is merged
|
||||
if git branch --merged | grep -q "$branch"; then
|
||||
git branch -d "$branch"
|
||||
echo "✓ Deleted branch: $branch"
|
||||
else
|
||||
echo "⚠️ Branch $branch not fully merged - keeping for safety"
|
||||
echo " To force delete: git branch -D $branch"
|
||||
fi
|
||||
done
|
||||
```
|
||||
|
||||
### Step 6: Update State File
|
||||
|
||||
```yaml
|
||||
# Update docs/planning/.project-state.yaml
|
||||
|
||||
cleanup_info:
|
||||
cleaned_at: "2025-11-03T16:00:00Z"
|
||||
worktrees_removed: [1, 2, 3]
|
||||
branches_deleted: true # or false
|
||||
```
|
||||
|
||||
## Output Format
|
||||
|
||||
**Success:**
|
||||
```markdown
|
||||
═══════════════════════════════════════════
|
||||
Worktree Cleanup
|
||||
═══════════════════════════════════════════
|
||||
|
||||
Cleaning up worktrees for all tracks...
|
||||
|
||||
Track 1:
|
||||
✓ Verified no uncommitted changes
|
||||
⚠️ Warning: 3 unpushed commits
|
||||
✓ Worktree removed: .multi-agent/track-01/
|
||||
|
||||
Track 2:
|
||||
✓ Verified no uncommitted changes
|
||||
✓ Verified pushed to remote
|
||||
✓ Worktree removed: .multi-agent/track-02/
|
||||
|
||||
Track 3:
|
||||
✓ Verified no uncommitted changes
|
||||
✓ Verified pushed to remote
|
||||
✓ Worktree removed: .multi-agent/track-03/
|
||||
|
||||
✓ Removed .multi-agent/ directory
|
||||
|
||||
Branches kept (to remove: use --all flag):
|
||||
- dev-track-01
|
||||
- dev-track-02
|
||||
- dev-track-03
|
||||
|
||||
Cleanup complete! ✅
|
||||
```
|
||||
|
||||
**With --all flag:**
|
||||
```markdown
|
||||
═══════════════════════════════════════════
|
||||
Worktree Cleanup (Including Branches)
|
||||
═══════════════════════════════════════════
|
||||
|
||||
Cleaning up worktrees and branches...
|
||||
|
||||
Worktrees:
|
||||
✓ Removed: .multi-agent/track-01/
|
||||
✓ Removed: .multi-agent/track-02/
|
||||
✓ Removed: .multi-agent/track-03/
|
||||
✓ Removed: .multi-agent/ directory
|
||||
|
||||
Branches:
|
||||
✓ Deleted: dev-track-01 (was merged)
|
||||
✓ Deleted: dev-track-02 (was merged)
|
||||
✓ Deleted: dev-track-03 (was merged)
|
||||
|
||||
All worktrees and branches removed! ✅
|
||||
|
||||
Note: Development history is still in main branch commits.
|
||||
```
|
||||
|
||||
## Error Handling
|
||||
|
||||
**Uncommitted changes:**
|
||||
```
|
||||
❌ Cannot clean up worktree: .multi-agent/track-02/
|
||||
|
||||
Uncommitted changes detected:
|
||||
M src/components/Header.tsx
|
||||
M src/pages/Dashboard.tsx
|
||||
?? src/components/NewFeature.tsx
|
||||
|
||||
Please commit or stash these changes:
|
||||
cd .multi-agent/track-02/
|
||||
git add .
|
||||
git commit -m "Final changes"
|
||||
|
||||
Or force removal (WILL LOSE CHANGES):
|
||||
git worktree remove --force .multi-agent/track-02/
|
||||
```
|
||||
|
||||
**Track not complete:**
|
||||
```
|
||||
⚠️ WARNING: Cleaning up incomplete tracks
|
||||
|
||||
Track 2 progress: 1/2 sprints complete (4/6 tasks)
|
||||
Track 3 progress: 0/2 sprints complete (0/5 tasks)
|
||||
|
||||
Are you sure you want to remove these worktrees?
|
||||
Work will be lost unless already committed.
|
||||
|
||||
To continue: /multi-agent:worktree cleanup --force
|
||||
```
|
||||
|
||||
## Safety Notes
|
||||
|
||||
- Always checks for uncommitted changes
|
||||
- Warns about unpushed commits
|
||||
- Won't delete unmerged branches (without -D flag)
|
||||
- Can be undone if branches kept (recreate worktree)
|
||||
- Updates state file for audit trail
|
||||
Reference in New Issue
Block a user