--- name: branch description: 根据当前仓库约定生成名称,并在用户确认准确命令后创建和切换本地 Git 分支。适用于明确要求新建分支的场景;仅查看、重命名、删除、合并、推送或发布分支不应触发本 Skill。 --- # 创建 Git 分支 安全地创建并切换本地分支。所有检查默认只读;`fetch` 和分支创建分别需要明确授权,不得把它们合并为一次隐含操作。 ## 创建前检查 1. 运行 `git status --short --branch`、`git branch --show-current`、`git branch --list`、`git branch --remotes` 和 `git worktree list --porcelain`。 2. 读取当前仓库适用的 `AGENTS.md`、贡献指南或其他明确的分支约定;没有约定时再参考现有分支命名。 3. 收集分支用途、简短描述和基准引用。不要默认 `main`、`master`、远程名称、版本分支或合并目标。 4. 若工作区不干净,说明现有修改会随切换保留;在用户明确选择继续前不得创建分支,也不得自动暂存、提交、还原或清理。 5. `.craftkit/local/**` 和 `.craftkit/cache/**` 不视为业务改动;若它们出现在普通状态中,提示检查 `.craftkit/.gitignore`。`.craftkit/agents/**`、`standards/**`、`knowledge/**`、`handoff/**` 和 `project.json` 属于普通项目改动,应与其他未提交内容一起展示。 ## 生成和验证名称 - 优先遵循仓库已有规则。没有规则时,可建议 `feature/`、`fix/`、`hotfix/` 或 `chore/`。 - 描述部分使用简短的小写连字符形式;保留用户提供且确有需要的任务编号,不自行编造编号。 - 使用 `git check-ref-format --branch ""` 验证名称。 - 使用 `git show-ref --verify --quiet "refs/heads/"` 检查本地分支,并检查同名远程引用;已存在时停止,不覆盖、不重置。 - 使用 `git rev-parse --verify "^{commit}"` 验证基准能够解析为提交。 ## 远程引用边界 只读检查不得自动执行 `git fetch`。如果用户要求基于远程最新状态,先展示远程名称和将要执行的 fetch 命令,取得单独确认后再执行。fetch 完成后重新验证基准,不把 fetch 授权视为创建分支授权。 ## 创建确认 执行前展示: - 当前分支和工作区状态; - 目标分支名称; - 基准引用及其提交短哈希; - 是否会携带未提交修改; - 将执行的唯一创建命令。 本地基准使用: ```text git switch -c "" "" ``` 远程跟踪引用使用: ```text git switch --no-track -c "" "/" ``` 只有用户在看到上述最终信息后明确确认,才执行该命令。用户调整名称或基准后必须重新展示并确认。 ## 创建后验证 运行 `git branch --show-current`、`git rev-parse --short HEAD` 和 `git status --short --branch`,确认当前分支、起点和工作区状态。远程基准创建时再用 `git rev-parse --abbrev-ref --symbolic-full-name @{upstream}` 检查没有错误 upstream;命令返回“无 upstream”属于预期结果。 本 Skill 到此结束,不执行 push、不设置远程 upstream,也不创建合并请求。失败时报告原始错误和当前仓库状态,不自动重试破坏性替代命令。