mcpField
P
pflow-commit

pflow-commit

github.com/phpinfo开发053 次安装2 周前更新
代码仓库

关于 pflow-commit

用于提交并推送 Git 更改的技能,会根据已知变更上下文生成单行 Conventional Commits 消息,再运行项目脚本。它要求检查脚本结果,并考虑工作树中的所有更改。

主要功能

  1. 01选择变更上下文来源
  2. 02生成单行 Conventional Commits 消息
  3. 03运行提交与推送脚本
  4. 04检查脚本错误和推送状态

适用场景

  1. 01提交当前会话中的更改
  2. 02为状态不明的工作树收集上下文
  3. 03推送提交并报告结果

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/phpinfo/pflow-skills --skill pflow-commit

安装后在 Claude Code 中输入/pflow-commit确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

scripts/
git-commit-context.sh
git-commit-push.sh
git-lib.sh

详细介绍

如果 git-commit-context.sh 或 git-commit-push.sh 失败(退出码非零,或其 JSON 中包含 error 字段),则打印 ⚠️ <error.message> 并停止。

步骤

  1. 选择上下文来源:

    • 对话上下文足够:当所有未提交的更改都在本次会话中完成,且你清楚每个更改文件及其改动内容时。在这种情况下,跳过脚本,前往步骤 2。
    • 否则(更改是在本次会话之外完成的、工作树状态未知,或有任何疑问),运行 .agents/skills/pflow-commit/scripts/git-commit-context.sh。如果输出为 No changes detected.,则告知用户没有内容需要提交并停止。
  2. 仅使用步骤 1 中的来源撰写 MESSAGE(见下方格式)。

  3. 从一开始就在提权执行模式下运行提交命令(以取得 .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> 并停止。

  4. 严格按以下格式回复,并替换为 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

评论

支持 Markdown