git

SKILL.md

Git 工作流工具

提供 Git 分支创建、推送和合并功能。直接使用 git 命令完成操作,简单高效。

何时使用

当用户出现以下情况时自动激活:

  • 创建分支:要求创建新分支、从 master 创建分支、需要新功能分支
  • 推送分支:要求推送分支到远程、推送并创建MR、推送变更到远程
  • 合并到 dev:要求将分支合并到 dev("merge to dev"、"合并到dev分支")、想要将功能分支合并到开发分支

功能

1. 创建分支

从 master 分支创建新分支。必须严格按照以下步骤执行

  1. 切换到 master 分支

    git checkout master
    
  2. 确认当前在 master 分支

    git branch
    

    必须看到 * master 标记,确认当前分支是 master。

  3. 更新 master 分支

    git pull
    
  4. 创建并切换到新分支

    git checkout -b <branch-name>
    

重要

  • 执行前检查是否有未提交的变更,如果有先处理(提交或暂存)
  • 必须确认 git branch 显示在 master 分支后再创建新分支
  • 禁止在任何其他分支创建新分支

2. 推送分支

推送当前分支到远程,检查并自动创建 MR(合并到 master)。

  1. 推送分支到远程

    # 获取当前分支名
    BRANCH_NAME=$(git rev-parse --abbrev-ref HEAD)
    
    # 首次推送新分支
    git push -u origin $BRANCH_NAME
    
    # 或推送当前分支(如果已设置 upstream)
    git push
    
  2. 检查并创建 MR(合并到 master):

    • 使用 glab mr list --source-branch <分支名> --target-branch master --state opened 检查是否已存在 MR
    • 如果已存在 MR,直接输出该 MR 的链接
    • 如果不存在,使用 glab mr create --source-branch <分支名> --target-branch master 自动创建 MR
    • 创建成功后,再次查询并输出新创建的 MR 链接
    • 如果创建失败,根据 git remote URL 构造手动创建 MR 的链接并输出给用户
      • 链接格式:https://<gitlab-host>/<project-path>/-/merge_requests/new?merge_request[source_branch]=<分支名>&merge_request[target_branch]=master
      • git config --get remote.origin.url 获取 remote URL,支持两种格式:
        • git@git.17zjh.com:group/project.git → 提取主机为 git.17zjh.com,项目路径为 group/project
        • https://git.17zjh.com/group/project.git → 提取主机为 git.17zjh.com,项目路径为 group/project

重要

  • MR 的目标分支必须是 master
  • 如果 MR 已存在,直接输出 MR 链接
  • 如果创建成功,输出创建的 MR 链接
  • 如果创建失败,输出手动创建链接

3. 合并到 dev(兼容 worktree)

目标:将 <branch-name> 合入 dev 并推送,兼容 dev 已在其他 worktree 检出的场景。

  1. 检查前置条件

    git status --porcelain
    
    • 若有未提交变更,先处理后再继续。
    • 记录当前目录和当前分支,便于后续回切。
  2. 优先尝试常规模式(当前仓库直接切换)

    git checkout dev
    git pull
    git merge <branch-name>
    git push
    
    • 常规模式完成后,切回原开发分支:
      git checkout <branch-name>
      
  3. 若切换 dev 失败且报错为 worktree 占用,进入 worktree 模式

    • 典型报错:fatal: 'dev' is already checked out at <path>
    • 获取 dev 对应 worktree 路径(推荐):
      git worktree list --porcelain
      
      在输出中找到 branch refs/heads/dev 对应的 worktree <path>
    • 在该路径执行:
      cd <dev-worktree-path>
      git pull
      git merge <branch-name>
      git push
      
    • worktree 模式下不需要执行 git checkout dev,也不需要“切回开发分支”(因为原仓库分支未切换)。
  4. 冲突处理

    • 禁止自动解决冲突:不要使用 -X theirs-X ours 或任何自动冲突解决策略,必须由用户手动处理冲突。
    • 如果发生冲突,先列出冲突文件:
      git diff --name-only --diff-filter=U
      
    • 立即回滚合并,恢复到合并前的状态:
      git merge --abort
      
    • 提示用户手动处理冲突,回复示例:
      合并 <branch-name> 到 dev 时发生冲突,已自动回滚(git merge --abort)。
      
      冲突文件:
      - path/to/file1.go
      - path/to/file2.go
      
      请手动处理冲突后重新合并:
      1. git checkout dev && git pull
      2. git merge <branch-name>
      3. 解决冲突文件
      4. git add <resolved-files> && git commit && git push
      

重要

  • 执行前检查是否有未提交的变更,如果有先处理。
  • <branch-name> 是要合并到 dev 的源分支。
  • git checkout dev 失败时,只有命中“dev 已在其他 worktree 检出”才切换到 worktree 模式;其他错误应直接返回并提示用户处理。
  • 最终反馈需包含:是否进入 worktree 模式、worktree 路径(若有)、merge/push 结果、冲突文件(若有)。

使用原则

  1. 直接使用 git 命令:不要创建脚本,直接执行 git 命令序列(含 worktree 场景)
  2. 严格按步骤执行:特别是创建分支时,必须确认在 master 后再创建
  3. 检查前置条件:执行前检查是否有未提交的变更
  4. 提供清晰反馈:每步执行后确认结果,特别是分支切换和确认操作
  5. 自动创建 MR:推送分支后,优先检查是否存在 MR,如果不存在则自动创建(合并到 master)
  6. MR 目标分支:所有 MR 的目标分支必须是 master,不是 dev 或其他分支
Installs
1
First Seen
Apr 16, 2026