SuperAPI AI Directory

soft-delete-git

General & other

View repository

Updated 10-16 01:07

About this skill

Soft Delete Git Branch Workflow

Invocation behavior

When this skill is invoked without an explicit branch name, target the currently checked-out branch. Invocation of the skill is authorization to begin the workflow immediately: inspect the working tree and determine the current branch without asking which branch to delete.

Only ask the user how to proceed when:

  • The working tree is dirty.
  • The current branch is the default branch.
  • Safe deletion fails and force deletion would require confirmation.

Do not ask the user to name or confirm the current branch before starting.

Steps:

  1. Check for uncommitted changes

    git status --porcelain
    

    If the working tree is dirty, stop and ask the user how to proceed (commit, stash, or discard) before switching branches.

  2. Get current branch name

    git branch --show-current
    

    If already on the default branch, there is no branch to delete — stop and ask the user which branch they meant.

  3. Determine the default branch

    git symbolic-ref --short refs/remotes/origin/HEAD
    

    This returns e.g. origin/main — the default branch is the part after origin/. If the ref is unset, fall back to main.

  4. Check out the default branch

    git checkout <default-branch>
    
  5. Pull latest changes

    git pull
    
  6. Soft delete the previous branch

    git branch -d <branch-name>
    
  7. If soft delete fails, check for a squash merge

    git branch -d fails for branches merged via GitHub's "Squash and merge", because the branch tip is never an ancestor of the default branch. Check whether the branch's PR was actually merged:

    gh pr view <branch-name> --json state,mergedAt
    
    • If the PR state is MERGED, confirm with the user, then delete with git branch -D <branch-name>.
    • Otherwise, escalate to the user rather than force-deleting.

Notes:

  • Uses lowercase -d for soft delete (safe delete that prevents deletion of unmerged branches)
  • Never use uppercase -D (hard delete) except in the verified-squash-merge case above, and only after confirming with the user
  • The workflow ensures the default branch is up to date before attempting the delete