with one click
clean-branches
// Delete local branches whose PRs have been merged upstream. Checks GitHub PR status for each branch. Triggers on: clean branches, delete merged branches, prune branches, branch cleanup.
// Delete local branches whose PRs have been merged upstream. Checks GitHub PR status for each branch. Triggers on: clean branches, delete merged branches, prune branches, branch cleanup.
Add a new best practice to the appropriate doc. Checks for duplicates, assigns stable IDs, creates new category docs if needed. Triggers on: add best practice, new best practice, add bp, new bp.
"Create an uplift PR that cherry-picks merged PRs from a contributor into a target branch (beta or release). Defaults to broad eligibility; the scope can be narrowed via a free-form description (e.g. 'only automated test and crash fixes'). Triggers on: /uplift, create uplift, uplift PRs."
Review PRs in the configured PR repository for best practices violations. Supports single PR (#12345), state filter (open/closed/all), and auto mode for cron. Triggers on: review prs, review recent prs, /review-prs, check prs for best practices.
Run all preflight checks (format, gn_check, presubmit, build, tests) to make sure the current work is ready for review.
Check if a failing test is a known upstream flake in Chromium's LUCI Analysis database. Provides flakiness statistics, verdict, and recommendation for filter file decisions. Triggers on: check upstream flake, is this test flaky upstream, check luci flakiness, upstream flake check.
Audit and fix best practices docs for stale references, duplicates, obsolete content, and formatting issues. Triggers on: fix bp docs, fix best practice docs, audit bp docs.
| name | clean-branches |
| description | Delete local branches whose PRs have been merged upstream. Checks GitHub PR status for each branch. Triggers on: clean branches, delete merged branches, prune branches, branch cleanup. |
| disable-model-invocation | true |
Clean up local branches by checking their GitHub PR status and deleting those that have been merged.
master:git fetch origin master
git branch --format='%(refname:short)' | grep -v '^master$'
Show the list to the user. If no branches exist besides master, report that
and stop.
Method 1: Direct ancestry — Catches regular merges and fast-forwards:
git branch --merged origin/master --format='%(refname:short)'
Method 2: Squash merge detection via git cherry — For branches not caught
by method 1, check if all commits have equivalent patches in origin/master. A
- prefix means the patch already exists upstream:
git cherry -v origin/master <branch>
If ALL lines start with - (or output is empty), the branch has been
squash-merged.
Method 3: GitHub PR status (if gh is authenticated) — For remaining
branches:
# Check for merged PRs
gh pr list --head <branch> --state merged --json number,title,url
# Check for closed (not merged) PRs
gh pr list --head <branch> --state closed --json number,title,url,mergedAt
A PR is "closed without merge" when it appears in the closed list but has an
empty/null mergedAt field. If gh is not authenticated, skip this method.
Important: Always compare against origin/master (not local master) to
detect merges even when local master is stale.
Categorize branches into these groups:
Display categorized list — Show the user a summary table with:
Confirm with user — Ask the user which branches to delete:
Delete confirmed branches — If currently on a branch being deleted,
switch to master first and fast-forward it:
git checkout master && git merge --ff-only origin/master
git branch -D <branch1> <branch2> ...
After deleting, prune stale remote tracking references:
git remote prune origin