Claude-skill-registry git-branch-manager
Create, switch, and manage git branches with proper handling of uncommitted changes. Use when creating feature branches, switching contexts, or cleaning up after merges.
git clone https://github.com/majiayu000/claude-skill-registry
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/git-branch-manager" ~/.claude/skills/majiayu000-claude-skill-registry-git-branch-manager && rm -rf "$T"
skills/data/git-branch-manager/SKILL.mdGit Branch Manager
Instructions
When to Invoke This Skill
- Creating a new feature/fix/chore branch
- Switching between branches
- Cleaning up merged branches
- Handling uncommitted changes before branch operations
- Validating current branch state
Core Capabilities
- Branch Creation - Create properly named branches from main
- Branch Switching - Safe branch changes with uncommitted change handling
- Branch Cleanup - Remove local branches after merge
- Branch Validation - Verify branch state and history
Standard Workflows
Creating a New Branch
-
Check Repository State Invoke the
skill to verify:git-state-validator- Current branch status
- Uncommitted changes
- Working directory state
-
Handle Uncommitted Changes If changes exist, ask user:
- Stash:
git stash push -m "WIP: switching to new branch" - Commit: Guide through commit process first
- Abort: Cancel branch creation
- Stash:
-
Ensure Latest Main
git checkout main git fetch origin git pull origin main -
Determine Branch Prefix Based on work type:
- New featuresfeat/
- Bug fixesfix/
- Maintenance, toolingchore/
- Documentationdocs/
- Code refactoringrefactor/
- Test additions/fixestest/
- Performance improvementsperf/
-
Create Branch
git checkout -b <prefix>/<description>Branch name format:
- Use kebab-case
- Maximum 50 characters
- Descriptive but concise
- Example:
feat/add-user-authentication
Switching Branches
-
Check Repository State Invoke the
skill to verify:git-state-validator- Current branch name
- Uncommitted changes
- Working directory status
-
Handle Changes (if any)
- Offer to stash, commit, or abort
- If stash:
git stash push -m "WIP: switching from <current> to <target>"
-
Switch Branch
git checkout <branch-name> -
Restore Stash (if applicable) After switching, if user stashed:
git stash list git stash pop
Cleaning Up Branches
-
Verify Branch is Merged
git branch --merged main -
Switch to Main (if on the branch being deleted)
git checkout main -
Check Branch Exists Before Deletion
git branch --list <branch-name>If no output, branch doesn't exist - skip deletion
-
Delete Local Branch (only if exists)
git branch -d <branch-name>Use
(force delete) only if user explicitly confirms:-Dgit branch -D <branch-name> -
Verify Deletion
git branch --list <branch-name>
Safe Branch Deletion Helper
CRITICAL: Always check if branch exists before attempting deletion to avoid errors.
Safe Deletion Pattern:
# Check if branch exists if git branch --list <branch-name> | grep -q <branch-name>; then git branch -d <branch-name> echo "Branch deleted" else echo "Branch does not exist, skipping" fi
Why This Matters:
- Prevents "branch not found" errors in automated workflows
- Handles cases where remote deletion already removed local tracking branch
- Makes cleanup scripts idempotent (safe to run multiple times)
Branch Naming Conventions
Good Examples:
feat/user-profile-pagefix/login-validation-errorchore/update-dependenciesdocs/api-endpoint-guide
Bad Examples:
(no type prefix)my-branch
(not kebab-case)feat/ThisIsMyNewFeature
(too long)feat/add-the-new-user-profile-page-with-authentication-and-settings
Error Handling
Branch Already Exists: Ask user to:
- Switch to existing:
git checkout <branch-name> - Delete and recreate:
git branch -D <branch-name> && git checkout -b <branch-name> - Choose different name
Uncommitted Changes Conflict:
error: Your local changes to the following files would be overwritten by checkout
- Must stash or commit changes first
- Cannot proceed without handling changes
Merge Conflicts When Pulling:
error: Merge conflict in <file>
- Must resolve conflicts before creating branch
- Guide user through conflict resolution
Cannot Delete Current Branch:
error: Cannot delete branch '<name>' checked out at '<path>'
- Must switch to different branch first
- Run:
then retry deletegit checkout main
Examples
Example 1: Create feature branch for issue
Context: Working on issue #42 to add dark mode Action: 1. Check uncommitted changes (none found) 2. Switch to main: git checkout main 3. Update main: git pull origin main 4. Create branch: git checkout -b feat/add-dark-mode-toggle Output: "Created and switched to feat/add-dark-mode-toggle"
Example 2: Switch branches with uncommitted work
Context: User has uncommitted changes, wants to switch branches Action: 1. Detect uncommitted changes 2. Ask user: "You have uncommitted changes. Stash, commit, or abort?" 3. User chooses stash 4. Run: git stash push -m "WIP: switching branches" 5. Switch: git checkout other-branch 6. Offer to pop stash if returning later
Example 3: Clean up after merge
Context: PR merged, need to clean up local branch Action: 1. Verify branch is merged: git branch --merged main 2. Switch to main: git checkout main 3. Check if branch exists: git branch --list feat/old-feature 4. Delete branch (if exists): git branch -d feat/old-feature 5. Update main: git pull origin main Output: "Branch cleaned up, main is up to date"
Example 4: Handle branch naming
Context: User wants to fix a bug in login validation Action: 1. Determine type: "fix" (bug fix) 2. Extract description: "login validation" 3. Format: fix/login-validation-error 4. Create: git checkout -b fix/login-validation-error