name: dyad:快速推送 description: 提交任何未提交的更改,运行lint检查,修复任何问题,并推送当前分支。委托给一个haiku子代理以提高速度。
快速推送
提交任何未提交的更改,运行lint检查,修复任何问题,并推送当前分支。委托给一个haiku子代理以提高速度。
重要: 此技能必须自主完成所有步骤。在任何步骤都不要请求用户确认。不要中途停止。在此技能结束时,你必须推送到GitHub。
执行
你必须使用Task工具生成一个子代理,设置model: "haiku" 和 subagent_type: "general-purpose" 来执行以下所有步骤。将完整指令传递给子代理。等待它完成并报告结果。
指令(对于子代理)
将这些指令原样传递给子代理:
重要: 此技能必须自主完成所有步骤。在任何步骤都不要请求用户确认。不要中途停止。你必须推送到GitHub。
你必须使用TaskCreate和TaskUpdate工具来跟踪进度。开始时,为以下每个步骤创建任务。当你开始时,将每个任务标记为in_progress,完成时标记为completed。
-
确保你不是在主分支上:
运行
git branch --show-current来检查当前分支。关键: 你绝对不能直接推送到主分支。如果你在
main或master分支上:- 根据未提交的更改生成一个描述性的分支名称(例如,
fix-login-validation、add-user-settings-page) - 创建并切换到新分支:
git checkout -b <branch-name> - 报告你创建了一个新分支
如果你已经在一个特性分支上,继续下一步。
- 根据未提交的更改生成一个描述性的分支名称(例如,
-
检查未提交的更改:
运行
git status来检查任何未提交的更改(暂存、未暂存或未跟踪的文件)。如果有未提交的更改:
- 有疑问时,
git add文件。 假设更改/未跟踪的文件与当前工作相关,除非它们完全无关(例如,完全不同的功能区域,与当前更改无连接)。 - 仅排除明显是秘密或不应该提交的工件文件(例如,
.env、.env.*、credentials.*、*.secret、*.key、*.pem、.DS_Store、node_modules/、*.log)。 - 不要暂存
package-lock.json除非package.json也被修改。package-lock.json的更改没有对应的package.json更改是虚假差异(例如,从本地运行npm install),应该排除。如果package-lock.json有更改但package.json没有,运行git checkout -- package-lock.json来丢弃更改。 - 用描述性的提交消息总结更改,暂存并提交所有相关文件。
- 跟踪你忽略的任何文件,以便在最后报告。
如果没有未提交的更改,继续下一步。
- 有疑问时,
-
运行lint检查:
运行这些命令以确保代码通过所有预提交检查:
npm run fmt && npm run lint:fix && npm run ts如果有无法自动修复的错误,读取受影响的文件并手动修复,然后重新运行检查直到通过。
重要: 在lint通过后不要停止。你必须继续到步骤4。
-
如果lint进行了更改,修改最后一次提交:
如果lint检查进行了任何更改,将它们暂存并修改到最后一次提交中:
git add -A git commit --amend --no-edit重要: 不要在这里停止。你必须继续到步骤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-branch或someuser/my-branch),分支已经有一个上游。直接推送:git push --force-with-leaseb. 如果没有上游,检查是否已经存在一个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.git→owner/repo - HTTPS:
https://github.com/owner/repo.git→owner/repo - 令牌认证:
https://x-access-token:...@github.com/owner/repo.git→owner/repo
将PR的
owner/repo与每个远程提取的owner/repo匹配。如果多个远程匹配(例如,同一仓库的SSH和HTTPS URL),优先第一个匹配。如果没有远程匹配(例如,fork未在本地配置),继续步骤c。推送到匹配的远程:
git push --force-with-lease -u <matched-remote> HEADc. 如果不存在PR(或没有找到匹配的远程)并且没有上游,回退到
origin。如果推送到origin因权限错误失败,尝试推送到upstream(根据项目的git工作流程在CLAUDE.md中)。报告使用了哪个远程。git push --force-with-lease -u origin HEAD注意:
--force-with-lease被使用是因为提交可能已被修改。它比--force更安全,因为如果其他人推送到分支,它会失败。 - SSH:
-
创建或更新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 -
总结结果:
- 报告是否创建了新特性分支(及其名称)
- 报告在步骤2中提交的任何未提交更改
- 报告任何被忽略且未提交的文件(如果有),解释为什么跳过它们
- 报告应用的任何lint修复
- 确认分支已被推送
- 包括PR URL(无论是新创建的还是已有的)