PR推送自动化技能Skill dyad:pr-push

这个技能用于自动化代码提交、代码质量检查和Git分支推送流程,实现高效的软件开发和持续集成。关键词:Git、代码质量、Lint检查、测试、PR推送、自动化、DevOps、持续集成、代码审查。

DevOps 0 次安装 0 次浏览 更新于 3/15/2026

name: dyad:pr-push description: 提交任何未提交的更改,运行lint检查,修复任何问题,并推送当前分支。

PR 推送

提交任何未提交的更改,运行lint检查,修复任何问题,并推送当前分支。

重要: 此技能必须自主完成所有步骤。在任何步骤都不要询问用户确认。不要中途停止。在技能结束时,你必须推送到GitHub。

任务跟踪

你必须使用TaskCreate和TaskUpdate工具来跟踪进度。 开始时,为以下每个步骤创建任务。当你开始一个步骤时,将其标记为in_progress,完成时标记为completed。这确保你完成所有步骤。

指令

  1. 确保你不在主分支上:

    运行 git branch --show-current 来检查当前分支。

    关键: 你绝不能直接推送到主分支。如果你在 mainmaster 上:

    • 基于未提交的更改生成一个描述性分支名称(例如,fix-login-validationadd-user-settings-page
    • 创建并切换到新分支:git checkout -b <branch-name>
    • 报告你创建了一个新分支

    如果你已经在一个功能分支上,继续下一步。

  2. 检查未提交的更改:

    运行 git status 来检查任何未提交的更改(已暂存、未暂存或未跟踪的文件)。

    如果有未提交的更改:

    • 如有疑问,使用 git add 添加文件。 假设更改/未跟踪的文件与当前工作相关,除非它们明显无关(例如,与当前更改无连接的完全不同功能区域)。
    • 仅排除明显是秘密或不应提交的工件文件(例如,.env.env.*credentials.**.secret*.key*.pem.DS_Storenode_modules/*.log)。
    • 不要暂存 package-lock.json 除非 package.json 也已修改。 如果没有对应的 package.json 更改,package-lock.json 的更改是虚假差异(例如,从本地运行 npm install 产生),应该被排除。如果 package-lock.json 脏但 package.json 干净,运行 git checkout -- package-lock.json 来丢弃更改。
    • 用描述性提交消息总结更改来暂存和提交所有相关文件。
    • 跟踪你忽略的任何文件,以便在最后报告。

    如果没有未提交的更改,继续下一步。

  3. 运行lint检查:

    运行这些命令以确保代码通过所有预提交检查:

    npm run fmt && npm run lint:fix && npm run ts
    

    如果有无法自动修复的错误,读取受影响文件并手动修复,然后重新运行检查直到通过。

    重要: 不要停止在lint通过后。你必须继续到第4步。

  4. 运行测试:

    运行测试套件以确保没有破坏:

    npm test
    

    如果有任何测试失败,修复它们再继续。不要跳过失败的测试。

    重要: 不要停止在测试通过后。你必须继续到第5步。

  5. 如果lint做了更改,修正最后一次提交:

    如果lint检查做了任何更改,暂存并将它们修正到最后一次提交中:

    git add -A
    git commit --amend --no-edit
    

    重要: 不要停止在这里。你必须继续到第6步。

  6. 推送分支(必需):

    你必须将分支推送到GitHub。不要跳过此步骤或询问确认。

    关键: 你绝不能从分叉仓库运行 git pull --rebase(或任何 git pull)。如果需要拉取/变基,只从上游仓库(dyad-sh/dyad)拉取。从分叉拉取可能会覆盖本地更改或引入分叉历史中的意外提交。

    首先,确定正确的远程推送:

    a. 检查分支是否已经跟踪一个远程:

    git rev-parse --abbrev-ref --symbolic-full-name @{u} 2>/dev/null
    

    如果成功(例如,返回 origin/my-branchsomeuser/my-branch),分支已经有上游。只需推送:

    git push --force-with-lease
    

    b. 如果没有上游,检查是否已存在PR并确定它是从哪个远程打开的:

    首先,获取PR的头仓库为 owner/repo

    gh pr view --json headRepository --jq .headRepository.nameWithOwner
    

    错误处理: 如果 gh pr view 以非零状态退出,检查错误是否表示“未找到PR”(预期——继续到步骤c)或其他失败(认证、网络、模糊分支——报告错误并停止而不是静默回退)。

    如果PR存在,找到与那个 owner/repo 对应的本地远程。列出所有远程并从每个URL中提取 owner/repo 部分:

    git remote -v
    

    对于每个远程URL,通过去除协议/主机名前缀和 .git 后缀来提取 owner/repo。这处理所有URL格式:

    • SSH:git@github.com:owner/repo.gitowner/repo
    • HTTPS:https://github.com/owner/repo.gitowner/repo
    • 令牌认证:https://x-access-token:...@github.com/owner/repo.gitowner/repo

    将PR的 owner/repo 与每个远程提取的 owner/repo 匹配。如果多个远程匹配(例如,同一仓库的SSH和HTTPS URL),优先第一个匹配。如果没有远程匹配(例如,分叉未在本地配置),继续到步骤c。

    推送到匹配的远程:

    git push --force-with-lease -u <matched-remote> HEAD
    

    c. 如果不存在PR(或未找到匹配远程)且没有上游,回退到 origin。如果推送到 origin 因权限错误失败,尝试推送到 upstream 代替(根据项目在CLAUDE.md中的git工作流)。报告使用了哪个远程。

    git push --force-with-lease -u origin HEAD
    

    注意:使用 --force-with-lease 是因为提交可能已被修正。它比 --force 更安全,因为如果其他人已经推送到分支,它会失败。

  7. 创建或更新PR(必需):

    关键: 不要告诉用户访问URL来创建PR。你必须自动创建它。

    首先,检查此分支是否已存在PR:

    gh pr view --json number,url
    

    如果PR已存在,跳过PR创建(推送已经更新了它)。

    如果不存在PR,使用 gh pr create 创建一个:

    gh pr create --title "<描述性标题>" --body "$(cat <<'EOF'
    ## 摘要
    <1-3个要点总结更改>
    
    ## 测试计划
    <如何测试这些更改>
    
    🤖 由 [Claude Code](https://claude.com/claude-code) 生成
    EOF
    )"
    

    使用提交消息和更改的文件来写一个好的标题和摘要。

  8. 移除review-issue标签:

    推送后,如果存在 needs-human:review-issue 标签,移除它(此标签表示问题在工作开始前需要人工审查,现在已完成):

    gh pr edit --remove-label "needs-human:review-issue" 2>/dev/null || true
    
  9. 记住学习(初始推送后):

    运行 /remember-learnings 技能来捕获此会话中的任何错误、障碍或见解到 AGENTS.mdrules/ 文件中。

    如果任何文件被此技能修改(用 git status 检查):

    • 暂存修改的文件:git add AGENTS.md rules/
    • 为学习创建一个新提交:
      git commit -m "docs: record session learnings"
      
    • 推送学习提交:
      git push
      

    重要: 不要修正前一个提交。为学习创建一个单独的提交,以便主要工作在推送前已经完成。

  10. 总结结果:

  • 报告是否创建了新功能分支(及其名称)
  • 报告在第2步中提交的任何未提交更改
  • 报告任何被忽略且未提交的文件(如果有),解释为什么它们被跳过
  • 报告任何应用的lint修复
  • 确认测试通过
  • 确认分支已推送
  • 报告添加到 AGENTS.mdrules/ 的任何学习(以及是否进行了后续推送)
  • 包括PR URL(无论是新创建还是已存在)