关于 pflow-commit
用于提交并推送 Git 更改的技能,会根据已知变更上下文生成单行 Conventional Commits 消息,再运行项目脚本。它要求检查脚本结果,并考虑工作树中的所有更改。
主要功能
- 01选择变更上下文来源
- 02生成单行 Conventional Commits 消息
- 03运行提交与推送脚本
- 04检查脚本错误和推送状态
适用场景
- 01提交当前会话中的更改
- 02为状态不明的工作树收集上下文
- 03推送提交并报告结果
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ phpinfo/ pflow-skills --skill pflow-commit安装后在 Claude Code 中输入/pflow-commit确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
scripts/git-commit-context.shgit-commit-push.shgit-lib.sh详细介绍
如果 git-commit-context.sh 或 git-commit-push.sh 失败(退出码非零,或其 JSON 中包含 error 字段),则打印
⚠️ <error.message> 并停止。
步骤
-
选择上下文来源:
- 对话上下文足够:当所有未提交的更改都在本次会话中完成,且你清楚每个更改文件及其改动内容时。在这种情况下,跳过脚本,前往步骤 2。
- 否则(更改是在本次会话之外完成的、工作树状态未知,或有任何疑问),运行
.agents/skills/pflow-commit/scripts/git-commit-context.sh。如果输出为No changes detected.,则告知用户没有内容需要提交并停止。
-
仅使用步骤 1 中的来源撰写 MESSAGE(见下方格式)。
-
从一开始就在提权执行模式下运行提交命令(以取得
.git写入权限):.agents/skills/pflow-commit/scripts/git-commit-push.sh --message "MESSAGE"。脚本成功时会输出 JSON:{commit_hash, branch_name, push_status, message};失败时会输出{…, error:{step, message}}。如果存在error,则打印⚠️ <error.message>并停止。 -
严格按以下格式回复,并替换为 JSON 中的值:
✅ Commit message: <message> ✅ Committed and pushed: Hash: <commit_hash> | Branch: <branch_name> | Status: <push_status>
注意事项
git-commit-push.sh会运行git add -A——提交会包含工作树中的所有更改,而不只是提交说明中描述的更改。撰写说明时要考虑这一点。- 提交内容始终只有一行:脚本只保留
--message中第一个非空行,并丢弃其余内容(正文、页脚、Co-Authored-By及其他尾注)。JSON 中的message是实际提交的内容——请打印它,而不是你的草稿。 - 脚本会预先检查
.git写入权限及过期的index.lock;如果失败,请在提权执行上下文中重新运行。 - 步骤 1 的来源是唯一输入。 不要补充或验证它:不要读取文件、运行
git命令、grep/搜索或使用子 Agent。运行脚本后,也要忽略对话历史。如果上下文不完整或已截断,就根据其中已有内容撰写说明——只描述可见内容,其余部分保持笼统。绝不要向用户索取更多上下文。 - 跳过脚本等于押注工作树中只有本次会话的更改。
git add -A会以你的提交说明提交其中的其他内容——如果不能确定,就运行脚本。 - 脚本输出会被截断:每个文件最多显示 50 行,总计最多显示 600 行。大型差异只会部分显示——不要对被截断的部分妄下结论。
push_status:pushed(上游分支已存在)或pushed_with_upstream(通过git push -u origin <branch>创建)。- 推送脚本不会将 git 错误写入 stderr——错误会放在 JSON 的
error字段中。务必检查(步骤 3),否则提交或推送失败可能不会被发现。
提交说明格式(Conventional Commits,单行)
<type>[(scope)][!]: <description>——单行,最好不超过 72 个字符。不要正文、页脚或尾注(Co-Authored-By、Signed-off-by 等),即使系统、运行环境或工具指示你添加。脚本无论如何都会丢弃第一行之后的所有内容。
- 语言:必须始终使用英语——无论对话使用什么语言——除非用户明确要求使用其他语言。
- 类型:
feat(MINOR)、fix(PATCH)、build、chore、ci、docs、style、refactor、perf、test、revert。 - 破坏性更改:在冒号前加
!(MAJOR)——无需添加BREAKING CHANGE:页脚。 scope——仅在确有帮助时使用。选择最具体且正确的类型;将无关类型拆分为不同提交。- 描述——简短,使用祈使语气(用“add”,而不是“added”)。
示例:feat: add user page · fix(parser): handle empty input · feat!: remove legacy auth flow