Skill2.2k estrellas del repoactualizado today
gh-merge
gh-merge automates the GitHub pull request workflow for merging code from the current branch to a target branch. Use this skill when you need to create a PR, wait for CI checks to pass, and merge to main or another specified branch. It handles branch rebasing, conflict resolution, CI monitoring with mandatory wait-for-checks validation, and final PR merging with squash option support.
Instalar en Claude Code
Copiargit clone --depth 1 https://github.com/AgentsMesh/AgentsMesh /tmp/gh-merge && cp -r /tmp/gh-merge/.claude/skills/gh-merge ~/.claude/skills/gh-mergeDespués abre una sesión nueva de Claude Code; el skill carga automáticamente.
Definición
SKILL.md
# GitHub 合并代码流程 将当前分支的代码通过 Pull Request 合并到 GitHub 目标分支。 ## 使用方式 ``` /gh-merge # 合并到 main(默认) /gh-merge develop # 合并到 develop 分支 /gh-merge --squash # 使用 squash 方式合并 ``` ## 使用流程 ### 1. 确认状态 ```bash git status git branch --show-current git remote -v gh auth status ``` **前置检查:** - 当前分支不能是目标分支 - `gh` CLI 已认证 - **识别 GitHub remote 名称**:检查 `git remote -v` 输出,找到指向 `github.com` 的 remote(可能是 `origin`、`github` 或其他名称),后续所有 git push/fetch 命令都使用该 remote 名称 ### 2. 提交代码 如有未提交的更改,先提交: ```bash git add <files> git commit -m "feat/fix/refactor: 描述更改内容" git push -u <github-remote> <current-branch> ``` **注意:** - 优先 `git add <具体文件>` 而非 `git add .`,避免意外提交敏感文件 - push 时使用步骤 1 识别的 GitHub remote 名称 ### 3. Rebase 到最新目标分支 合并前先 rebase,减少冲突风险: ```bash git fetch <github-remote> main # 如有未提交的更改,先 stash git stash # 仅在有 unstaged changes 时执行 git rebase <github-remote>/main # rebase 完成后恢复 stash git stash pop # 仅在之前执行了 stash 时 # rebase 改变了历史,需要 force push git push --force-with-lease <github-remote> <current-branch> ``` **如果 rebase 有冲突:** 1. 解决冲突文件 2. `git add <resolved-files>` 3. `git rebase --continue` 4. 重复直到 rebase 完成 5. `git push --force-with-lease` ### 4. 创建 Pull Request ```bash gh pr create --base main --title "PR标题" --body "描述" ``` 记录返回的 PR 编号(如 `#42`)。 ### 5. 等待并监控 CI Checks(关键步骤) **⚠️ 绝对不能跳过此步骤。必须确认 CI 全部通过后才能合并。** ```bash # 等待 CI 触发(GitHub Actions 有 10-30 秒延迟) sleep 30 # 等待所有 checks 完成 gh pr checks <pr-number> --watch --interval 15 --fail-fast ``` **处理 `no checks reported` 的情况:** 如果 `gh pr checks` 返回 `no checks reported`,这表示 CI 尚未触发,**绝不能**认为"没有 CI"而直接合并。必须重试: ```bash # 等待更长时间后重试(最多重试 3 次,每次间隔 30 秒) sleep 30 gh pr checks <pr-number> --watch --interval 15 --fail-fast ``` 如果重试 3 次(共等待约 2 分钟)后仍然 `no checks reported`,则明确告知用户"CI 未触发",**询问用户是否确认合并**,不得自行决定。 ### 6. 处理 CI 失败 如果 CI Checks 失败: ```bash # 1. 查看失败的 job 日志 gh run view <run-id> --log-failed # 2. 修复代码 # 3. 提交修复并推送 git add <files> git commit -m "fix: 修复 CI 错误" git push <github-remote> <current-branch> # 4. 重新等待 CI sleep 30 gh pr checks <pr-number> --watch --interval 15 --fail-fast ``` 重复此过程直到所有 Checks 通过。 ### 7. 合并 PR **前置条件(全部满足才能执行合并):** 1. `gh pr checks` 至少报告了 1 个 check 2. 所有 checks 状态为 `pass` 3. 没有未解决的冲突 ```bash gh pr merge <pr-number> --squash --delete-branch ``` **合并策略:** - `--squash`:压缩为单个 commit(推荐,保持历史整洁) - `--merge`:保留完整 commit 历史 - `--rebase`:线性历史,无 merge commit **处理 worktree 环境下的报错:** 在 git worktree 中执行 `gh pr merge --delete-branch` 时,可能报错: ``` failed to run git: fatal: 'main' is already used by worktree at '...' ``` 这是因为 worktree 无法切换到 main 分支来删除本地分支。**这个报错不影响远程合并**,PR 已经成功合并。用 `gh pr view` 确认: ```bash gh pr view <pr-number> --json state,mergedAt # 确认 state 为 "MERGED" ``` ### 8. 清理 ```bash # 在 worktree 中无需手动切换分支和清理 # worktree 会在退出时提示清理 # 非 worktree 环境: git checkout main && git pull git branch -d <branch-name> ``` ## 完成后输出 ``` ✅ PR #42 已成功合并到 main 合并详情: - 分支: feature/xxx → main - CI Checks: 全部通过 (N/N) - 合并方式: squash - PR: https://github.com/org/repo/pull/42 ``` ## 处理常见问题 ### PR 有合并冲突 ```bash git fetch <github-remote> main git stash # 如有 unstaged changes git rebase <github-remote>/main # 解决冲突... git add <resolved-files> git rebase --continue git stash pop # 如之前 stash 了 git push --force-with-lease <github-remote> <current-branch> ``` ### CI 需要 re-run ```bash gh run rerun <run-id> --failed sleep 30 gh pr checks <pr-number> --watch --interval 15 --fail-fast ``` ### Review 未通过 ```bash gh pr view <pr-number> --comments # 修复后推送 git add <files> && git commit -m "fix: address review feedback" && git push ``` ## 常用命令速查 | 操作 | 命令 | |------|------| | 查看 PR 列表 | `gh pr list` | | 查看 PR 详情 | `gh pr view <number>` | | 查看 PR Checks | `gh pr checks <number>` | | 查看 Run 日志 | `gh run view <run-id> --log-failed` | | 合并 PR | `gh pr merge <number> --squash --delete-branch` | | 关闭 PR | `gh pr close <number>` | | 重跑失败 CI | `gh run rerun <run-id> --failed` | ## 注意事项 - **CI 通过是合并的硬性前提**,绝不能在 CI 未完成或未触发时合并 - 识别正确的 GitHub remote 名称(不一定是 `origin`) - 推荐 `--squash` 合并方式保持 main 历史整洁 - 使用 `--force-with-lease`(而非 `--force`)推送 rebase 后的代码 - worktree 环境中 `gh pr merge` 的本地分支删除报错可以忽略,远程合并不受影响 - 提交前确保代码已通过本地测试
Del mismo repositorio