| name | git.branch.manage |
| description | Create, checkout, rebase, and manage git branches following Carbon ACX naming conventions and workflows. |
git.branch.manage
Purpose
This skill automates git branch management for Carbon ACX by:
- Creating branches with proper naming conventions
- Checking out existing branches safely
- Managing branch state (tracking, upstream)
- Performing rebases and merges
- Detecting and reporting merge conflicts
- Cleaning up stale branches
- Ensuring proper branch hygiene
When to Use
Trigger Patterns:
- "Create a branch for..."
- "Switch to branch..."
- "Rebase this branch"
- "Update my branch from main"
- "Delete old branches"
- Before starting new work on a feature/fix
Do NOT Use When:
- Making commits (use
git.commit.smart) - Creating PRs (use
git.pr.create) - Resolving complex merge conflicts (requires human judgment)
Allowed Tools
bash- Git commandsgrep- Search branch lists, commit messages
Access Level: 2 (Git operations - can create/delete branches)
Tool Rationale:
bash: Required for all git branch operationsgrep: Filter branch lists and search patterns
Explicitly Denied:
- No force deleting branches without confirmation
- No rebasing published branches without warning
- No modifying main/master branches
Expected I/O
Input:
- Type: Branch management request
- Context: Current working state, branch name/description
- Optional: Base branch (defaults to main/master)
Example:
"Create a feature branch for dark mode"
"Switch to the UX improvements branch"
"Rebase my branch on main"
"Delete merged branches"
Output:
- Type: Branch operation completed
- Format: Confirmation message with branch state
- Includes:
- Branch name used
- Operation performed (create, checkout, rebase, delete)
- Current HEAD position
- Any conflicts or warnings
Validation:
- Branch name follows conventions
- No uncommitted changes (or properly handled)
- Operations succeed without data loss
- User informed of branch state changes
Dependencies
Required:
- Git repository
- Clean working directory (or stashing strategy)
Optional:
- Remote repository configured for push/pull operations
Workflow
Branch Creation
Step 1: Determine Branch Name
Naming Convention:
<type>/<description>
Types:
feat/orfeature/- New featuresfix/orbugfix/- Bug fixeschore/- Maintenance, tooling, dependenciesdocs/- Documentation onlyrefactor/- Code restructuringtest/- Test additions/updatesperf/- Performance improvements
Description:
- Lowercase with hyphens (kebab-case)
- Concise but descriptive (3-5 words)
- No special characters except hyphens
Examples:
feat/dark-mode-togglefix/aviation-calculation-errorchore/update-react-dependenciesdocs/update-api-documentationrefactor/component-structure
Alternative naming (also accepted):
feature/descriptionbugfix/description- User-specified names (if they follow convention)
Step 2: Check for Existing Branch
git branch --list "feat/dark-mode-toggle"
git branch -r --list "*/feat/dark-mode-toggle"
If exists: Ask user if they want to:
- Checkout existing branch
- Create with different name
- Delete and recreate (dangerous!)
Step 3: Determine Base Branch
# Check if main exists
git rev-parse --verify main 2>/dev/null
# Otherwise check for master
git rev-parse --verify master 2>/dev/null
Default: main (or master if main doesn't exist)
User can override: "Create branch from develop"
Step 4: Fetch Latest
git fetch origin
Ensures base branch is up-to-date
Step 5: Create and Checkout
git checkout -b feat/dark-mode-toggle origin/main
Alternative (two-step):
git branch feat/dark-mode-toggle origin/main
git checkout feat/dark-mode-toggle
Step 6: Confirm
git status
git log -1 --oneline
Report to user:
✅ Branch created: feat/dark-mode-toggle
Base: origin/main (abc1234)
Current HEAD: abc1234 chore: prepare release v1.3.0
Status: No commits yet, ready for work
Branch Checkout
Step 1: Check Working Directory
git status --porcelain
If uncommitted changes:
- Offer to stash:
git stash push -m "WIP: auto-stashed by git.branch.manage" - Or require commit first
Step 2: Find Branch
Local branches:
git branch --list "*pattern*"
Remote branches:
git branch -r --list "origin/*pattern*"
If multiple matches: Present list to user for selection
If no matches: Suggest creating new branch
Step 3: Checkout
Local branch:
git checkout feat/dark-mode-toggle
Remote branch (first checkout):
git checkout -b feat/dark-mode-toggle origin/feat/dark-mode-toggle
Step 4: Confirm
git status
Report:
✅ Switched to branch: feat/dark-mode-toggle
Tracking: origin/feat/dark-mode-toggle
Status: Up to date with remote
Branch Rebase
Step 1: Verify Current Branch
git rev-parse --abbrev-ref HEAD
Safety check: Never rebase main/master directly
Step 2: Check Uncommitted Changes
git status --porcelain
If uncommitted: Require commit or stash first
Step 3: Fetch Latest
git fetch origin
Step 4: Rebase
git rebase origin/main
If conflicts:
⚠️ Rebase conflict detected
Conflicting files:
- apps/carbon-acx-web/src/components/Dashboard.tsx
- package.json
Options:
1. Resolve conflicts manually
2. Abort rebase: git rebase --abort
To continue after resolving:
- git add <resolved-files>
- git rebase --continue
Do NOT auto-resolve conflicts - require human judgment
Step 5: If Successful
git log --oneline -5
Report:
✅ Rebase successful
Your branch has been rebased on origin/main
Previous HEAD: abc1234
New HEAD: xyz9876
Commits on this branch: 3
- feat(web): add dark mode state management
- feat(web): create theme toggle component
- test(web): add theme switching tests
⚠️ Note: Branch history has been rewritten
If already pushed, you'll need to force-push: git push --force-with-lease
Branch Cleanup
Step 1: List Merged Branches
# Local branches merged to main
git branch --merged main | grep -v "main\|master\|\*"
# Remote merged branches
git branch -r --merged main | grep -v "main\|master"
Step 2: Present List
Show user:
Merged branches (safe to delete):
Local:
- feat/dark-mode-toggle
- fix/aviation-calculation
Remote:
- origin/chore/update-dependencies
Delete these branches? (yes/no)
Step 3: Delete (if approved)
Local:
git branch -d feat/dark-mode-toggle
Remote:
git push origin --delete feat/dark-mode-toggle
Report:
✅ Deleted 2 local branches
✅ Deleted 1 remote branch
Remaining branches: 5
Examples
Example 1: Create Feature Branch
User: "Create a branch for dark mode feature"
Claude Process:
- Parse intent: Feature branch
- Generate name:
feat/dark-mode-toggle - Check if exists: No
- Fetch origin
- Create from
origin/main:git fetch origin git checkout -b feat/dark-mode-toggle origin/main - Report:
✅ Created branch: feat/dark-mode-toggle Base: origin/main (abc1234) Ready to start work on dark mode feature
Example 2: Switch to Existing Branch
User: "Switch to the UX improvements branch"
Claude Process:
- Search branches:
git branch --list "*ux*" - Find match:
feat/ux-improvements - Check working directory: Clean ✅
- Checkout:
git checkout feat/ux-improvements - Report:
✅ Switched to: feat/ux-improvements Last commit: d4e5f6g refactor(web): improve dashboard layout Status: 2 commits ahead of origin/main
Example 3: Rebase on Main
User: "Rebase my branch on main"
Claude Process:
- Current branch:
feat/dark-mode-toggle - Check uncommitted: Clean ✅
- Fetch:
git fetch origin - Rebase:
git rebase origin/main - Success:
✅ Rebase successful Your branch is now up-to-date with origin/main 3 commits rebased - Warn about force-push if already pushed
Example 4: Handle Rebase Conflict
User: "Update my branch from main"
Claude Process:
- Current branch:
feat/emission-chart - Rebase:
git rebase origin/main - Conflict detected:
⚠️ Rebase stopped due to conflicts Conflicting files: - apps/carbon-acx-web/src/components/Chart.tsx (both modified) Conflict type: Content conflict Your changes: Added EmissionChart component Main changes: Refactored base Chart component Resolution needed: 1. Open Chart.tsx and resolve conflict markers 2. Keep both changes if compatible 3. After fixing: git add Chart.tsx git rebase --continue To abort: git rebase --abort - Wait for user to resolve
- Do NOT auto-resolve
Example 5: Clean Up Merged Branches
User: "Delete old branches"
Claude Process:
- List merged:
git branch --merged main - Found:
feat/dark-mode-toggle,fix/typo-readme - Present list:
Merged branches (safe to delete): - feat/dark-mode-toggle (merged in PR #42) - fix/typo-readme (merged in PR #38) Delete these? (yes/no) - User confirms: yes
- Delete:
git branch -d feat/dark-mode-toggle fix/typo-readme - Report:
✅ Deleted 2 local branches Remaining: 3 active branches
Example 6: Create Branch from Specific Base
User: "Create a hotfix branch from v1.2.3 tag"
Claude Process:
- Parse: Hotfix, base is tag v1.2.3
- Verify tag exists:
git rev-parse v1.2.3 - Generate name:
hotfix/urgent-security-fix(ask user for description) - Create:
git checkout -b hotfix/urgent-security-fix v1.2.3 - Report:
✅ Created branch: hotfix/urgent-security-fix Base: v1.2.3 (tag) ⚠️ This branch is behind main - use for hotfix only
Limitations
Scope Limitations:
- Cannot auto-resolve merge conflicts (requires human judgment)
- Cannot rebase published/shared branches without warning
- Cannot delete branches with unmerged changes (safety)
- Cannot modify protected branches (main/master)
Known Edge Cases:
- Detached HEAD state → Warn user, suggest creating branch from current state
- Diverged branches (force-push needed) → Warn about risks
- Stale remote branches → Suggest pruning with
git remote prune - Branch name conflicts → Suggest alternative names
Performance Constraints:
- Rebasing many commits (100+) may take time
- Fetching from slow remotes may delay operations
- Large conflicts difficult to present in text format
Security Boundaries:
- Does not force-delete branches without confirmation
- Does not auto-resolve conflicts (data loss risk)
- Does not push to protected branches
- Respects repository permissions
Validation Criteria
Success Metrics:
- ✅ Branch names follow conventions
- ✅ Operations complete without data loss
- ✅ User informed of branch state changes
- ✅ Conflicts detected and reported (not auto-resolved)
- ✅ Working directory state preserved (stash if needed)
- ✅ Remote tracking configured when appropriate
Failure Modes:
- ❌ Uncommitted changes → Suggest commit or stash
- ❌ Branch name invalid → Suggest corrected name
- ❌ Merge conflict → Report, provide resolution steps
- ❌ Remote unreachable → Suggest checking network
- ❌ Branch doesn't exist → Suggest creating or list similar names
Recovery:
- If conflict during rebase: Provide clear resolution steps
- If branch exists: Offer alternatives (checkout, rename, delete)
- If uncommitted changes: Offer stash or commit options
- If operation fails: Provide git status and suggest next action
Related Skills
Composes With:
git.commit.smart- Commit work before switching branchesgit.pr.create- Create PR after branch work completegit.release.prep- Create release branch
Dependencies:
- None - foundational skill
Alternative Skills:
- For commits:
git.commit.smart - For PRs:
git.pr.create
Maintenance
Owner: Workspace Team (shared skill) Review Cycle: Quarterly Last Updated: 2025-10-24 Version: 1.0.0
Maintenance Notes:
- Update branch naming conventions if Carbon ACX changes standards
- Review rebase strategies as git workflows evolve
- Adjust conflict detection logic for better reporting
- Keep stash/unstash behavior synchronized with user preferences