git
SKILL.md
Git 工作流工具
提供 Git 分支创建、推送和合并功能。直接使用 git 命令完成操作,简单高效。
何时使用
当用户出现以下情况时自动激活:
- 创建分支:要求创建新分支、从 master 创建分支、需要新功能分支
- 推送分支:要求推送分支到远程、推送并创建MR、推送变更到远程
- 合并到 dev:要求将分支合并到 dev("merge to dev"、"合并到dev分支")、想要将功能分支合并到开发分支
功能
1. 创建分支
从 master 分支创建新分支。必须严格按照以下步骤执行:
-
切换到 master 分支:
git checkout master -
确认当前在 master 分支:
git branch必须看到
* master标记,确认当前分支是 master。 -
更新 master 分支:
git pull -
创建并切换到新分支:
git checkout -b <branch-name>
重要:
- 执行前检查是否有未提交的变更,如果有先处理(提交或暂存)
- 必须确认
git branch显示在 master 分支后再创建新分支 - 禁止在任何其他分支创建新分支
2. 推送分支
推送当前分支到远程,检查并自动创建 MR(合并到 master)。
-
推送分支到远程:
# 获取当前分支名 BRANCH_NAME=$(git rev-parse --abbrev-ref HEAD) # 首次推送新分支 git push -u origin $BRANCH_NAME # 或推送当前分支(如果已设置 upstream) git push -
检查并创建 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/projecthttps://git.17zjh.com/group/project.git→ 提取主机为git.17zjh.com,项目路径为group/project
- 链接格式:
- 使用
重要:
- MR 的目标分支必须是
master - 如果 MR 已存在,直接输出 MR 链接
- 如果创建成功,输出创建的 MR 链接
- 如果创建失败,输出手动创建链接
3. 合并到 dev(兼容 worktree)
目标:将 <branch-name> 合入 dev 并推送,兼容 dev 已在其他 worktree 检出的场景。
-
检查前置条件:
git status --porcelain- 若有未提交变更,先处理后再继续。
- 记录当前目录和当前分支,便于后续回切。
-
优先尝试常规模式(当前仓库直接切换):
git checkout dev git pull git merge <branch-name> git push- 常规模式完成后,切回原开发分支:
git checkout <branch-name>
- 常规模式完成后,切回原开发分支:
-
若切换 dev 失败且报错为 worktree 占用,进入 worktree 模式:
- 典型报错:
fatal: 'dev' is already checked out at <path> - 获取
dev对应 worktree 路径(推荐):
在输出中找到git worktree list --porcelainbranch refs/heads/dev对应的worktree <path>。 - 在该路径执行:
cd <dev-worktree-path> git pull git merge <branch-name> git push - worktree 模式下不需要执行
git checkout dev,也不需要“切回开发分支”(因为原仓库分支未切换)。
- 典型报错:
-
冲突处理:
- 禁止自动解决冲突:不要使用
-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 结果、冲突文件(若有)。
使用原则
- 直接使用 git 命令:不要创建脚本,直接执行 git 命令序列(含 worktree 场景)
- 严格按步骤执行:特别是创建分支时,必须确认在 master 后再创建
- 检查前置条件:执行前检查是否有未提交的变更
- 提供清晰反馈:每步执行后确认结果,特别是分支切换和确认操作
- 自动创建 MR:推送分支后,优先检查是否存在 MR,如果不存在则自动创建(合并到 master)
- MR 目标分支:所有 MR 的目标分支必须是
master,不是dev或其他分支