dyad:快速推送Skill dyad:fast-push

这是一个自动化Git工作流程的技能,用于快速提交代码更改、运行代码质量检查、自动修复问题并推送到GitHub。关键词:Git自动化、代码提交、lint检查、DevOps工具、GitHub推送、快速推送、自动化脚本。

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

name: dyad:快速推送 description: 提交任何未提交的更改,运行lint检查,修复任何问题,并推送当前分支。委托给一个haiku子代理以提高速度。

快速推送

提交任何未提交的更改,运行lint检查,修复任何问题,并推送当前分支。委托给一个haiku子代理以提高速度。

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

执行

你必须使用Task工具生成一个子代理,设置model: "haiku"subagent_type: "general-purpose" 来执行以下所有步骤。将完整指令传递给子代理。等待它完成并报告结果。

指令(对于子代理)

将这些指令原样传递给子代理:


重要: 此技能必须自主完成所有步骤。在任何步骤都不要请求用户确认。不要中途停止。你必须推送到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-lock.json 的更改没有对应的 package.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. 如果lint进行了更改,修改最后一次提交:

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

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

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

  5. 推送分支(必需):

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

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

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

    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),优先第一个匹配。如果没有远程匹配(例如,fork未在本地配置),继续步骤c。

    推送到匹配的远程:

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

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

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

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

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

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

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

    gh pr view --json number,url
    

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

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

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

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

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

    gh pr edit --remove-label "needs-human:review-issue" 2>/dev/null || true
    
  7. 总结结果:

    • 报告是否创建了新特性分支(及其名称)
    • 报告在步骤2中提交的任何未提交更改
    • 报告任何被忽略且未提交的文件(如果有),解释为什么跳过它们
    • 报告应用的任何lint修复
    • 确认分支已被推送
    • 包括PR URL(无论是新创建的还是已有的)