# Merge Main Cleanup

> This skill should be used when the user requests merging work into main and then deleting all other local and remote branches, keeping only main.

- Skill: `majiayu000/merge-main-cleanup` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds add majiayu000/merge-main-cleanup`
- Raw SKILL.md: https://api.skillmd.com/api/skills/majiayu000/merge-main-cleanup/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: majiayu000 (https://skillmd.com/u/majiayu000)
- Updated: 2026-09-09
- Page: https://skillmd.com/skills/majiayu000/merge-main-cleanup

---


# Merge Main Cleanup

## Overview
Perform a full merge into main and then delete all other branches locally and on the default remote. Remove any worktrees tied to deleted branches.

## When to Use
- User says to merge into main and keep only main.
- User wants a one-step cleanup of branches after merge.

## Workflow

### 1) Validate repository state
- Run `git status --porcelain` and stop if there are uncommitted changes.
- Run `git rev-parse --show-toplevel` and work from that root.
- Run `git fetch --all --prune` to sync branch state.

### 2) Determine base branch
- Prefer `main`; if missing, use `master`.
- Command: `git branch --list main master`

### 3) Merge current branch into base
- Get current branch: `git branch --show-current`.
- If already on base, skip merge.
- Otherwise:
  - `git checkout <base>`
  - `git pull --ff-only`
  - `git merge <current-branch>`
  - Resolve conflicts if any, then complete the merge.

### 4) Push base to remote
- Push base: `git push origin <base>`

### 5) Remove worktrees for non-base branches
- List worktrees: `git worktree list`.
- For each worktree whose branch is not `<base>`, remove it:
  - `git worktree remove <path>`

### 6) Delete all non-base branches (local + remote)
- Local branches (force delete, as requested):
  - List: `git branch --format='%(refname:short)'`
  - For each branch not `<base>`, run: `git branch -D <branch>`
- Remote branches (origin):
  - List: `git branch -r --format='%(refname:short)' | rg '^origin/'`
  - For each remote branch not `origin/<base>`, run: `git push origin --delete <branch>`

### 7) Verify only base remains
- `git branch -vv` should show only `<base>`.
- `git branch -r` should show only `origin/<base>`.

## Notes
- This skill is intentionally destructive: it deletes all branches except base.
- If the remote is not named `origin`, replace it accordingly.
- If deletion of worktree files is blocked by policy, report and ask the user to remove them manually.

