关于 commitpush
用于安全提交并推送 Git 更改的开发 skill,适合需要在提交前检查敏感内容并处理子模块的工作流。它先扫描风险,再分析更改、生成提交信息,并包含推送失败的恢复步骤。
主要功能
- 01暂存前扫描密钥与敏感文件
- 02检测子模块及其更改状态
- 03分析差异并生成提交信息
- 04仅暂存获准的明确文件路径
- 05处理非快进推送及冲突
- 06强制推送须经明确授权
适用场景
- 01提交前排查意外包含的凭据
- 02选择需要纳入提交的子模块
- 03依据仓库历史撰写提交信息
- 04推送被拒后尝试变基并重试
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ thatjuan/ agent-skills --skill commitpush安装后在 Claude Code 中输入/commitpush确认已加载。
附带文件README.mdreferences/sensitive-patterns.md
详细介绍
提交并推送
一种安全的提交并推送工作流:暂存前筛查机密和敏感文件,检测子模块以进行定向提交,并处理完整的提交与推送流程,包括推送失败后的恢复。
工作流
阶段 1:安全筛查
安全筛查会在任何暂存操作之前运行,找出提交后可能带来风险的文件和内容。
检测目标:
- 机密和凭据(API 密钥、令牌、密码、私钥)
- 含敏感值的环境和配置文件(
.env、.env.*、凭据文件) - 证书和密钥文件(
.pem、.key、.p12、.pfx、.jks) - 云服务提供商凭据文件(AWS、GCP、Azure 配置)
- 数据库连接字符串和转储文件
- 大型二进制文件和构建产物
筛查流程:
- 将
git status的输出与已知敏感文件模式进行比对(参见 sensitive-patterns.md) - 扫描
git diff内容中的内嵌机密,包括高熵字符串、API 密钥前缀、硬编码密码和连接字符串 - 向用户展示被标记的文件或内容,并建议排除、继续或中止
对于不明确的情况(例如,无法确定配置文件是否包含真实凭据),会先向用户询问并澄清,然后再继续。
阶段 2:子模块检测
包含子模块的仓库(桥接仓库)需要用户明确指定提交范围。
检测:git submodule status --recursive 用于识别子模块及其变更状态(+ 前缀表示存在未提交的更改)。
存在有更改的子模块且未指定范围时:
- 向用户展示有更改的子模块列表和父仓库
- 由用户选择要纳入本次提交周期的子模块
- 先提交并推送所选子模块(深度优先),然后父仓库再暂存更新后的子模块引用
**不存在子模块或已指定范围时:**跳过此阶段。
阶段 3:变更分析
分析已暂存和未暂存的更改,为生成提交消息提供依据。
输入:
git status— 查看已更改、已暂存和未跟踪文件的概况git diff和git diff --staged— 查看详细的变更内容git log --oneline -5— 查看近期提交的风格,以保持一致
提交消息生成:
- 如果仓库遵循约定式提交格式(根据近期历史检测),则使用该格式
- 提交消息重点说明“为什么”,而不是“是什么”
- 当更改集中在特定范围时包含范围信息(例如,
fix(auth): ...) - 提交消息仅包含变更说明,不包含共同作者署名
阶段 4:暂存、提交、推送
**暂存:**通过阶段 1 筛查的文件会使用 git add 和明确的文件路径进行暂存,而不使用 git add . 或 git add -A 等不加区分的命令。
**提交:**使用阶段 3 生成的消息创建提交。
推送:git push 将更改发送到远程仓库。如果不存在上游跟踪分支,则使用 git push -u origin <branch>。
阶段 5:推送失败后的恢复
**推送被拒绝(非快进):**尝试执行 git fetch + git rebase,然后重试推送。
**强制推送:**必须获得用户明确授权。使用 --force-with-lease(而非 --force)。
**冲突或无法解决的错误:**向用户报告完整情况,以便手动解决。
参考
| 文件 | 何时阅读 |
|---|---|
| sensitive-patterns.md | 阶段 1 期间——敏感文件模式和内嵌机密标记的完整列表 |
参数
可选的用户提供上下文:要提交的特定文件、覆盖默认值的提交消息、范围指令(例如,“仅父仓库”“仅子模块 X”)。