git-commit

v2026.09.24

在 CalVer 仓库中执行用户明确要求的提交、打标签、推送或提交历史整理。普通开发和准备 PR 不自动触发提交或历史改写。

GitHub
Install command
npx skhub add zrong/git-commit
Markdown
SKILL.md

Git Commit with CalVer Tag

将当前仓库变更提交到 git,并按 CalVer 规则打 tag。

核心规则

  • 仅执行用户已授权的操作。修改本 skill、普通开发或准备 PR,不构成提交或改写历史的授权。
  • 已授权提交且仓库采用提交后打 CalVer tag 的约定时,先提交,再算版本,再打 tag;用户明确只要 commit 时不打 tag。
  • 版本号必须来自 calver.py,不得手动推断。
  • calver.py 是本 skill 自带脚本,不属于项目仓库。
  • 需要打 tag 时定位本 skill 的真实安装目录;脚本不可用则停止版本计算和打 tag,说明缺口。仍可完成不依赖该脚本且已授权的工作。
  • 只有用户明确要求时,才执行 git push 和 git push --tags。

脚本定位

calver.py 指的是 skill 自带脚本,而不是项目仓库里的同名文件。

执行时先定位 skill 的安装目录,再运行:

python3 <skill安装目录>/scripts/calver.py

通过本 SKILL.md 的实际路径解析安装目录和符号链接;无法可靠定位时,不猜测版本号,只停止依赖该脚本的步骤。

工作流程

  1. 查看仓库状态,确认当前变更范围。
  2. 只暂存并提交与当前任务相关的文件。
  3. Commit Message 必须严格遵循下面的 Commit Message 规范(若用户提供了额外的说明,应当融合至该格式中)。
  4. 本次包含打 tag 时,运行 calver.py 获取下一个版本号。
  5. 本次包含打 tag 时,用该版本号创建 tag。
  6. 如用户明确要求推送,再执行 git push 和 git push --tags。

Commit Message 规范

提交变更时,Commit Message 必须严格遵循以下格式约束:

<type>(<scope>): <summary>

<正文:描述本次变更的背景与动机>

Agent-Task: <原始任务描述或任务 ID>
Agent-Model: <使用的模型,如 gpt-4o、gemini-2.5-pro>
Agent-Decision: <关键设计决策及理由>
Agent-Limitation: <已知局限或后续 TODO>
  • <type>:变更类型,如 feat (新功能), fix (修复), docs (文档), style (格式), refactor (重构), perf (性能), test (测试), chore (构建/工具)。
  • <scope>:影响范围,可以是具体的组件、模块或 Skill 名称。
  • <summary>:简短概括变更内容(必须使用简体中文)。
  • Agent-Task:原始任务描述或任务 ID。
  • Agent-Model:执行任务时所使用的模型名称(例如,本轮运行所使用的模型,如 gemini-3.5-flash-high 等)。
  • Agent-Decision:关键技术/设计决策及其背后的合理理由。
  • Agent-Limitation:任何已知的局限性、潜在风险或后续待办事项(TODO)。
  • 语言约束(简体中文):除了必要的 Conventional Commits 英文关键字(如 feat, fix 等 <type> 和 <scope>)以及英文字段名/元数据(Meta)的 Key(如 Agent-Task:)之外,<summary>、<正文> 以及各元数据字段的具体 Value 描述,必须使用简体中文进行撰写。

原子提交规范

仅在用户已授权提交时,按独立、可验证的逻辑边界组织原子提交(Atomic Commits);一个完整的小改动可用一个提交,不为凑数量而拆分。每次提交遵循以下要求:

  • 单一逻辑变更:每次提交必须且仅代表一个清晰的逻辑变更(例如:独立实现一个子功能、修复一个特定的 bug、添加一组相关的测试等)。
  • 可构建且可测试:每次提交都必须使代码库保持在可构建、可运行且测试能够通过的状态,绝不能提交破坏构建的半成品。
  • 功能与重构分离:严禁在同一个提交中混合代码重构(Refactoring)与新功能开发/Bug修复。重构应当作为独立的提交。
  • 模块解耦:严禁在同一个提交中混合对多个不相关模块的修改。不同模块的变更应当分作不同的提交。

原子提交工作流

用户已授权提交,且要求拆分或变更包含多个独立逻辑单元时,采用以下工作流:

  1. 分析变更集:开发完成后,使用 git diff 或 git status 评估所有代码修改。
  2. 划分逻辑块:将代码变更合理规划并拆分为若干个在逻辑上相互独立、先后依赖清晰的子块。
  3. 分步暂存与提交:
    • 使用 git add <file> 或 git add -p 仅暂存属于当前首个逻辑块的修改,避免混入无关代码。
    • 为该块撰写符合 Commit Message 规范 的 commit message。
    • 执行提交:git commit -m "..."。
    • 按受影响范围验证。可复用同一代码状态的有效结果;不因提交数量重复全量构建。验证中间提交时使用其实际文件树,不能以包含后续未提交改动的工作树测试代替。
  4. 循环往复:重复步骤 3,直到本次授权范围内的变更块均已提交。
  5. CalVer 与 Tag 规则:
    • 本次包含打 tag 时,仅在最后一个原子提交完成后,才运行 calver.py 获取最新版本号,并为该次最新提交打上 tag。
    • 前置的过渡性原子提交不需要打 tag。

整理提交历史工作流

仅在用户明确要求 squash、合并提交或 rebase 等历史整理时使用;“准备开 PR”本身不触发历史改写。

  1. 读取分支、工作树和上游状态,确定实际基线 <base> 与待整理的提交范围;不要假定主干叫 main。保护无关改动并保存原 HEAD,便于恢复。
  2. 规划保留、合并的提交及其消息,遵循上面的 Commit Message 规范。
  3. 用户已明确授权范围内的本地历史整理可直接执行,不重复索要确认。共享/已发布历史的改写或超出已授权范围时,先展示具体方案并取得相应授权;已有明确授权继续有效。
  4. 在该范围内执行 git rebase -i <base>,必要时用非交互的 GIT_SEQUENCE_EDITOR。历史整理不自动授权强制推送。
  5. 检查最终提交历史和文件树;纯 squash 若文件树未变,可复用原验证结果;冲突解决改变代码时验证受影响部分。完成已授权目标后结束,不自动追加整理或优化。

CalVer 规则

  • 格式:YY.WW.MICRO
  • YY:ISO 年份后两位
  • WW:ISO 周数
  • MICRO:全局递增序号,跨年不重置

常见错误

错误做法正确做法
在项目仓库里找 scripts/calver.py在 skill 安装目录里执行脚本
找不到路径就手动算版本号停止计算版本和打 tag,报告原因
用户没明确要求就 push仅完成已授权的本地 commit/tag
把无关文件一起提交只提交当前任务相关文件
Discovery
Tags

No tags published for this skill.

Version
Latest version metadata

Version

v2026.09.24

Published

Sep 24, 2026

Category

Uncategorized

License

Not specified

Source path

git-commit

Default branch

main

Latest commit

c893d98

Tree SHA

bd0e487