--- name: create-branch description: Create and checkout a new git branch with smart validation and GitHub issue integration allowed-tools: Bash(git status) Bash(git branch) Bash(git checkout) Bash(git push) Bash(git rev-parse) Bash(git ls-remote) Bash(gh issue develop) Bash(gh issue list) Bash(gh issue view) metadata: model: sonnet --- ## Language Conventions **Infer language style from the project:** - Analyze existing branches, commit messages, and documentation to detect the project's language variant (US English, UK English, etc.) - Match the spelling conventions found in the project (e.g., "synchronize" vs "synchronise", "center" vs "centre") - Maintain consistency with the project's established language style throughout branch names and command outputs --- # Create Branch Command This command creates and checks out a new git branch with intelligent validation and GitHub issue integration. ## Priority: GitHub Issue Integration **IMPORTANT**: If the user provides an issue number (e.g., "#123", "123", or "issue 123"), ALWAYS prioritise using GitHub CLI's issue development workflow: 1. **Check for GitHub CLI availability**: ```bash gh --version ``` If not available, inform the user and fall back to manual branch creation. 2. **Verify the issue exists**: ```bash gh issue view ``` Display issue title and status to confirm. 3. **Create branch linked to issue**: ```bash gh issue develop -c ``` - The `-c` flag automatically checks out the newly created branch - GitHub automatically generates an appropriate branch name from the issue title - The branch is linked to the issue for better project tracking 4. **Skip to remote push step** (step 8 below) ## Manual Branch Creation Workflow If no issue number is provided, follow this workflow: ### 1. Check Repository Status ```bash git status ``` Verify: - Clean working directory or acceptable uncommitted changes - Current branch information - Whether we're in a git repository ### 2. Get Branch Name Input Ask the user for the desired branch name. Accept input in any format - the command will handle formatting and validation. ### 3. Auto-Detect and Apply Prefix Analyse the branch name input for keywords and automatically add appropriate prefixes: - **feature/** - Keywords: "add", "implement", "create", "new", "feature" - **bugfix/** - Keywords: "fix", "bug", "resolve", "patch", "repair" - **hotfix/** - Keywords: "hotfix", "urgent", "critical", "emergency" - **chore/** - Keywords: "chore", "refactor", "update", "upgrade", "maintain" - **docs/** - Keywords: "docs", "documentation", "readme", "guide" If the user's input already starts with a recognised prefix (feature/, bugfix/, etc.), keep it as-is. ### 4. Validate Branch Name Apply comprehensive validation: #### Kebab-Case Enforcement - Convert to lowercase - Replace spaces and underscores with hyphens - Ensure format is: `prefix/kebab-case-name` #### Character Validation Reject branch names containing: - Spaces (convert to hyphens) - Special characters: `~`, `^`, `:`, `?`, `*`, `[`, `]`, `\`, `@{`, `..` - Control characters or non-ASCII (except hyphens and slashes) - Leading or trailing slashes or hyphens #### Length Validation - Minimum: 3 characters (excluding prefix) - Maximum: 100 characters (total) ### 5. Check for Duplicates Check both local and remote branches: ```bash # Check local branches git branch --list "" # Check remote branches git ls-remote --heads origin "" ``` If branch exists: - **Locally**: Offer to checkout existing branch instead - **Remotely**: Warn user and suggest alternative name - **Both**: Inform user and ask if they want to checkout or choose different name ### 6. Determine Base Branch Use smart defaulting: 1. Check if `main` exists: ```bash git rev-parse --verify main ``` 2. If not, check if `master` exists: ```bash git rev-parse --verify master ``` 3. If neither exists, use current HEAD 4. Allow user to specify different base branch if needed (ask before creating) ### 7. Create and Checkout Branch ```bash git checkout -b ``` Confirm successful creation with a message showing: - Branch name - Base branch used - Current status ### 8. Remote Push Recommendation Ask the user: "Would you like to push this branch to remote and set up tracking?" If yes: ```bash git push -u origin ``` This enables: - Remote backup of the branch - Collaboration with team members - GitHub PR creation workflow - Branch visibility in GitHub UI ## Error Handling Provide clear, actionable error messages: - **Not a git repository**: "This directory is not a git repository. Initialise one with `git init` or navigate to a repository." - **GitHub CLI not available**: "GitHub CLI (`gh`) is not installed. Install it from https://cli.github.com or use manual branch creation." - **Issue not found**: "Issue #123 not found. Check the issue number or create a branch manually." - **Invalid branch name**: "Branch name contains invalid characters. Suggested: `feature/valid-branch-name`" - **Branch exists**: "Branch `feature/existing` already exists. Switch to it with `git checkout feature/existing` or choose a different name." - **Network issues**: "Unable to check remote branches. Proceeding with local creation only." ## Examples ### Example 1: GitHub Issue Integration ``` User: "Create a branch for issue #456" Command: gh issue view 456 Output: #456 - Add user authentication (open) Command: gh issue develop 456 -c Output: Created and checked out branch: feature/456-add-user-authentication ``` ### Example 2: Manual with Auto-Prefix ``` User: "Create branch: fix login bug" Analysis: Contains "fix" → apply "bugfix/" prefix Validated: "bugfix/login-bug" Command: git checkout -b bugfix/login-bug main ``` ### Example 3: Custom Prefix ``` User: "Create branch: docs/update readme" Analysis: Already has "docs/" prefix → keep as-is Validated: "docs/update-readme" Command: git checkout -b docs/update-readme main ``` ## Best Practises 1. **Always prioritise GitHub issue workflow** when issue numbers are mentioned 2. **Validate thoroughly** before creating branches to avoid git errors 3. **Use descriptive names** that clearly indicate the purpose 4. **Follow team conventions** - check existing branch names for patterns 5. **Push to remote early** for backup and collaboration 6. **Link branches to issues** whenever possible for better project tracking