Branch Cleanup After PR Merge
When a PR is merged (merge commit, squash-merge, or rebase-merge), run this to sync local state and remove obsolete branches.
Workflow
- •
Checkout main, pull
bashgit checkout main git pull
- •
Fetch with prune (removes refs for deleted remote branches)
bashgit fetch --prune
- •
Identify branches to delete
- •Merge commits:
git branch --merged main— branch tip is in main's history - •Squash/rebase:
git branch -vv | grep ': gone]'— remote was deleted on GitHub after merge
- •Merge commits:
- •
Delete local branches
- •From --merged list (exclude main)
- •From gone list: extract branch name, run
git branch -d <name>
Merge Type Coverage
| Type | Detection | Notes |
|---|---|---|
| Merge commit | --merged main | Branch tip is ancestor of main |
| Squash merge | : gone] after prune | Remote branch deleted; commits not in main's history |
| Rebase merge | : gone] after prune | Same as squash |
Protected Branches
Never delete: main, master, develop, release/*, hotfix/*
Cross-Platform
- •PowerShell: Use
Select-Stringinstead ofgrep; use;not&& - •Bash: Standard grep/awk/sed
Reference
Full command: .cursor/commands/branch-cleanup.md