blocked-branch-preserve-tag-cleanup
Safely clean stale local branches that cannot be merged by preserving them with local tags before deletion
Best use case
blocked-branch-preserve-tag-cleanup is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
Safely clean stale local branches that cannot be merged by preserving them with local tags before deletion
Teams using blocked-branch-preserve-tag-cleanup should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/blocked-branch-preserve-tag-cleanup/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How blocked-branch-preserve-tag-cleanup Compares
| Feature / Agent | blocked-branch-preserve-tag-cleanup | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
Safely clean stale local branches that cannot be merged by preserving them with local tags before deletion
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# Blocked Branch Preserve-Tag Cleanup Use when cleaning many repos and some stale local branches cannot be merged safely into the default branch. ## Trigger conditions - `git merge` fails with `refusing to merge unrelated histories` - branch has no matching remote branch - branch has shared history but the diff is extremely large / artifact-heavy / conflict-heavy, making opportunistic cleanup riskier than preservation - repo hygiene is the goal, not historical branch recovery work ## Safe disposition workflow 1. Inspect the blocked branch: - confirm default branch - check whether a matching remote branch exists - check whether histories are unrelated via failed merge or missing merge-base - estimate branch size with `git diff --shortstat <default>...<branch>` when histories are related 2. Classify the branch: - `mergeable` if small and clean - `preserve-only` if unrelated history, no remote, or very large/conflict-heavy - `active/worktree-backed` if the branch is attached to a live worktree; do not delete yet 3. For `preserve-only` branches, create a local recovery tag before deletion: - `git tag preserve/<branch>-$(date +%Y%m%d) <branch>` 4. Delete the local branch after tagging: - `git branch -D <branch>` 5. Do not push the preservation tag by default. Keep it local unless the user explicitly wants remote archival. ## Why this works This gives you a reversible cleanup path: branch clutter is removed, but the exact tip commit remains recoverable through the tag. ## Practical heuristics - Unrelated-history branches with no remote are usually stale/orphan branches; do not force `--allow-unrelated-histories` unless the user explicitly wants content salvage. - If a branch diff is huge (for example thousands of files, generated assets, or vendored environments), prefer preserve-only cleanup over ad hoc conflict resolution. - If a conflict is in legacy control-plane files (`.agent-os`, old instructions, generated environments), that is usually a sign the branch is not worth opportunistic merging during hygiene work. - Worktree-backed branches must be handled after their worktrees are removed or confirmed inactive. ## Verification After cleanup, verify: - `git branch -vv` no longer lists the stale branch - `git tag --list 'preserve/*'` contains the recovery tag - default branch remains checked out and clean/up to date
Related Skills
mnt-analysis-cleanup
Survey, classify, and clean up `/mnt/local-analysis/` (or any sibling-to-workspace-hub directory holding orphan worktrees, codex-burn artifacts, agent log accumulations, and outer-clone duplicates) without losing useful code/work. Surfaces a tiered approval menu rather than baking decisions; defers all destructive ops until user confirms.
pre-completion-cleanup-audit
Audit and dispose of session residue (orphan files, scratch dirs, sibling-repo state, locks, trash-stages) BEFORE claiming a task complete. Required gate before any agent says "all done", "task complete", or hands work back to user/orchestrator.
worktree-branch-sync-hygiene
Class-level branch, worktree, dirty-main, stash, sync, and hook hygiene for workspace-hub style multi-repo work.
multi-repo-branch-hygiene-at-scale
Systematic approach to cleaning stale branches, resolving merge conflicts, and syncing multiple repos
handle-popup-blocked-pdf-downloads
Recover from automation-blocking PDF popups by capturing page data and escalating to manual download
handle-blocked-financial-sites-workaround
Workflow for accessing financial account data when browser automation is blocked on brokerage sites
handle-blocked-financial-sites-data-export
Workflow for extracting data from blocked financial sites when browser automation is restricted
git-worktree-cleanup-at-scale
Identify and remove stale git worktrees blocking branch deletion in multi-repo environments
git-worktree-cleanup-and-branch-reconciliation
Systematic process for cleaning up stale git worktrees, resolving merge conflicts in diverged branches, and reconciling branch state across multiple repositories.
git-worktree-cleanup-and-branch-hygiene
Systematic approach to cleaning up stale git worktrees, orphan branches, and branch hygiene at scale across multiple repos
git-blob-size-filter-cleanup
Strip oversized blobs from unpushed commits using git filter-branch when GitHub's 100 MB limit blocks push
repo-sync-deleted-remote-branch-and-unrelated-history-recovery
Recover multi-repo sync failures caused by deleted upstream branches, stale git index locks, and local branches with unrelated history to the remote default branch.