Sync local branches after a PR is merged. Checkout main, pull, fetch --prune, delete local branches that are merged or track gone remotes. Use when a PR was just merged (merge, squash, or rebase) or when local branch list is stale.
When a PR is merged (merge commit, squash-merge, or rebase-merge), run this to sync local state and remove obsolete branches.
Complements maintenance-cleanup (broader hygiene) and git-worktrees — use worktrees when branch deletion fails.
Checkout main, pull
git checkout main
git pull
Fetch with prune (removes refs for deleted remote branches)
git fetch --prune
Identify branches to delete
git branch --merged main — branch tip is in main's historygit branch -vv | grep ': gone]' — remote was deleted on GitHub after mergeDelete local branches
git branch -d <name>| 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 |
Never delete: main, master, develop, release/*, hotfix/*
Select-String instead of grep; chain with ; not && where neededSome repos keep copy-paste commands under .cursor/commands/branch-cleanup.md — optional.