关于 auto-push
auto-push 是在用户要求一次性操作时,对当前 Git 工作树的所有更改进行暂存、提交和推送的 Agent 技能。它会先与远程分支同步,并在执行前检查密钥、大文件及其他风险。
主要功能
- 01查看工作树更改和提交历史
- 02将当前分支与 origin 同步
- 03扫描密钥和风险文件
- 04暂存所有更改并创建提交
- 05推送并核实远程提交
适用场景
- 01推送一组相关的工作树更改
- 02安全检查后提交并推送
- 03发布当前分支上的更改
- 04确认提交已到达远程仓库
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ luongnv89/ skills --skill auto-push安装后在 Claude Code 中输入/auto-push确认已加载。
附带文件docs/README.mdreferences/edge-cases-and-reports.md
详细介绍
提交并推送所有更改
注意:暂存所有更改,提交并推送到远程端。仅在确定所有更改都属于同一组时使用。
使用时机
当用户要求“提交并推送所有更改”“发布此更改”“自动推送”,或以其他方式希望一次性暂存、提交并推送当前工作树时,触发此技能。如果用户需要 PR、代码审查、发布版本或标签,则跳过。
前提条件
- 已安装
git,且当前目录位于 git 仓库内。 - 存在
origin远程端,且用户有权限推送到该远程端。 - 已设置
git config user.name和user.email,以便运行git commit。
编辑前同步仓库(必需)
在现有仓库中创建、更新或删除文件之前,先将当前分支与远程端同步:
branch="$(git rev-parse --abbrev-ref HEAD)"
git fetch origin
git pull --rebase origin "$branch"
如果工作树不干净,先暂存,再同步,然后恢复:
git stash push -u -m "pre-sync"
branch="$(git rev-parse --abbrev-ref HEAD)"
git fetch origin && git pull --rebase origin "$branch"
git stash pop
如果缺少 origin、无法拉取,或发生 rebase/stash 冲突,请停止并询问用户后再继续。
操作说明
第 1 步:分析更改
并行运行:
git status- 显示已修改/新增/删除/未跟踪的文件git diff --stat- 显示更改统计信息git log -1 --oneline- 显示最近一次提交,用于参考提交消息风格
第 2 步:运行安全检查
❌ 发现以下情况时,记录一项问题:
- 密钥:
.env*、*.key、*.pem、credentials.json、secrets.yaml、id_rsa、*.p12、*.pfx、*.cer - API 密钥:任何具有真实值(而非
your-api-key、xxx、placeholder等占位符)的*_API_KEY、*_SECRET、*_TOKEN变量 - 大文件:未经 Git LFS 管理且大于 10 MB 的文件
- 构建产物:
node_modules/、dist/、build/、__pycache__/、*.pyc、.venv/ - 临时文件:
.DS_Store、thumbs.db、*.swp、*.tmp
API 密钥验证: 检查已修改文件中是否存在类似以下模式:
OPENAI_API_KEY=sk-proj-xxxxx # ❌ Real key detected!
AWS_SECRET_KEY=AKIA... # ❌ Real key detected!
STRIPE_API_KEY=sk_live_... # ❌ Real key detected!
# ✅ Acceptable placeholders:
API_KEY=your-api-key-here
SECRET_KEY=placeholder
TOKEN=xxx
API_KEY=<your-key>
SECRET=${YOUR_SECRET}
✅ 还需检查:
.gitignore:git status --porcelain中没有任何路径匹配上述密钥、构建产物或临时文件模式。如果有匹配项,记录为问题并建议添加对应的.gitignore条目。- 合并冲突:
git diff --name-only --diff-filter=U无输出。如果有路径输出,记录为问题。 - 分支:如果当前分支是
main或master,记录为问题。 - API 密钥:更改文件中的每个
*_API_KEY、*_SECRET或*_TOKEN值都是占位符。如果某个值是真实值,记录为问题。
上面第一组中每个匹配项也都是一项问题。只要记录了至少一项问题,安全检查就算未通过。
第 3 步:确认并执行
- 打印下面的试运行预览。如果安全检查未通过,以问题列表结尾,而不要显示
Proceeding now。 - 如果所有安全检查都通过,继续执行第 4 步。不要询问用户是否继续。
- 如果任何安全检查未通过,列出所有问题并停止。只有用户明确确认了每项非阻塞问题,且第 4 条已解决所有阻塞问题后,才能继续。未经用户确认,绝不能绕过未通过的安全检查。
- 用户确认不能消除阻塞问题:
- 密钥(匹配到密钥文件或真实 API 密钥值):只有用户说明该匹配是误报(例如占位符、测试夹具或示例值)时,才可继续。如果是真实密钥,请停止并告知用户从更改中移除该密钥并轮换密钥,然后重新运行
/auto-push。 - 大文件(未经 Git LFS 管理且大于 10 MB):停止。只有重新运行第 2 步后不再发现该文件,才能继续;这是因为该文件已由 Git LFS 管理、已删除或已列入
.gitignore。
- 密钥(匹配到密钥文件或真实 API 密钥值):只有用户说明该匹配是误报(例如占位符、测试夹具或示例值)时,才可继续。如果是真实密钥,请停止并告知用户从更改中移除该密钥并轮换密钥,然后重新运行
📊 Changes Summary:
- X files modified, Y added, Z deleted
- Total: +AAA insertions, -BBB deletions
🔒 Safety: ✅ No secrets | ✅ No large files | ⚠️ [warnings]
🌿 Branch: [name] → origin/[name]
Proceeding now: git add . → commit → push
第 4 步:暂存文件
仅当第 3 步中没有遗留阻塞问题时才运行此步骤,以确保 git add . 不会暂存密钥或大文件。按顺序运行:
git add .
git status --porcelain
检查第 1 步列出的每个路径现在都已暂存。如果有路径缺失,或出现安全检查未覆盖的路径,请停止并报告。
步骤 5:生成提交消息
分析更改并创建符合约定格式的提交消息:
格式:
[type]: Brief summary (max 72 characters)
- Key change 1
- Key change 2
- Key change 3
类型: feat、fix、docs、style、refactor、test、chore、perf、build、ci
示例:
docs: Update concept README files with comprehensive documentation
- Add architecture diagrams and tables
- Include practical examples
- Expand best practices sections
步骤 6:提交并推送
git commit -m "$(cat <<'EOF'
[Generated commit message]
EOF
)"
git push
git log -1 --oneline --decorate
- 如果
git commit失败(例如,预提交钩子运行失败),请打印钩子输出并停止。不要重试。 - 如果
git push因非快进错误而被拒绝,请运行一次git pull --rebase && git push。如果变基发生冲突,或第二次推送失败,请停止并报告。 - 如果
git push成功,请检查git log -1 --oneline --decorate,确认新提交显示在origin/[branch]上。
步骤 7:报告结果
打印 Expected Output 中所示的报告。报告以状态开头,然后包含:
- 依据: 运行过的检查及其结果(安全扫描、推送退出代码、
git log验证)。 - 不确定项: 未检查的内容。本地不会运行 CI 和远程钩子。用于检查 API 密钥的占位符测试只是模式匹配,并不能证明密钥真实存在。列出用户在步骤 3 中确认的每一项发现,以及用户认定为误报的每一项发现。
- 决定: 推送成功后写“无需审批。”受阻时,说明需要用户采取什么操作。
预期输出
最终报告采用纯文本,并严格使用以下固定格式。如果用户要求其他格式,仍按相同顺序保留四个部分。
成功时:
✅ Successfully pushed to remote!
Commit: abc1234 feat: add login page with OAuth support
Branch: feature/auth → origin/feature/auth
Files changed: 4 (+112, -8)
Evidence: safety scan 0 findings · git push exit 0 · origin/feature/auth at abc1234
Uncertainty: CI and remote hooks not run; API-key check is pattern-based
Decision: No approval needed.
安全检查失败时:
❌ Push blocked — secrets detected
.env: OPENAI_API_KEY=sk-proj-xxxxx (real key)
Evidence: safety scan 1 finding; nothing staged, committed, or pushed
Uncertainty: API-key check is pattern-based; if this value is a placeholder or test fixture, say it is a false positive to continue
Decision: Remove the key from the change and rotate it, then re-run /auto-push. A real secret cannot be confirmed to continue.
验收标准
满足以下所有条件,才表示技能运行成功:
- 工作树已与 origin 同步(已运行
git fetch;变基干净完成,或 stash/pop 无冲突地完成) - 安全扫描未发现机密、真实 API 密钥或大型二进制文件;或者用户已将每项机密发现认定为误报,并明确确认了所有其他非阻塞发现
- 分支正确(如果是
main/master,已发出警告并获得确认) - 提交消息符合步骤 5 中的约定格式
-
git push退出代码为 0,且git log -1显示新提交位于远程跟踪引用上 - 已打印最终报告,包含提交哈希、分支、文件数量、依据、不确定项和决定
评估运行结果时,还要检查读者是否能根据报告采取行动:
- 结果一目了然: 第一行说明已推送或受阻。
- 事实与假设分开: 依据仅列出实际运行过的检查;不确定项说明未检查的内容。
- 声明有据可查: 每项声明都指向命令结果(推送退出代码、
git log输出或发现对应的文件路径)。安全扫描通过并不意味着推送成功。 - 下一步明确: 决定应写“无需审批。”或说明需要用户采取的操作。
Agent 检查无法确认人类是否理解了报告。如果没有收到人类反馈,应报告人类是否理解尚未确认。
处理边缘情况和错误
有关边缘情况表、各阶段步骤完成报告格式、错误处理指南和替代工作流(选择性暂存、交互式 git add -p、PR 流程),请参阅 references/edge-cases-and-reports.md。每完成一步后,请根据该文件打印步骤完成报告。
如果希望更精细地控制提交内容,也可以改用单独的 git 命令。