Branch cleaner
Goal
Safely identify stale branches and provide explicit delete/prune commands.
Inputs to confirm (ask if missing)
- •Default branch (main/master/develop).
- •Remote name (origin) and whether remote deletion is desired.
- •Safety rules: keep patterns (release/, hotfix/), minimum age, merged-only.
Workflow
- •Sync and inspect
- •Run
git fetch --prune. - •Check
git statusand note uncommitted changes.
- •Run
- •Build candidate lists
- •Local merged into default:
git branch --merged <base> - •Local not merged (list only):
git branch --no-merged <base> - •Remote merged:
git branch -r --merged <base> - •Stale by date:
git for-each-ref --sort=committerdate refs/heads --format="%(committerdate:short) %(refname:short)"
- •Local merged into default:
- •Exclude protected branches
- •Always keep
<base>, current branch, and user-provided patterns.
- •Always keep
- •Confirm with user
- •Present candidates grouped by local vs remote.
- •Provide delete commands
- •Delete branches approved for deletion by the user
- •
Optional GitHub CLI checks
- •
gh pr list --state merged --base <base>to correlate merged branches. - •
gh pr view <branch>to verify status if needed.
Deliverables
- •Candidate lists and rationale.
- •Warnings for unmerged or recently updated branches.
- •Don't remove remote branches unless explicitly approved.