Files
opencode/skill/git/commit-workflow.md

3.7 KiB
Raw Permalink Blame History

Git Commit Workflow

提交暂存文件,自动生成提交信息并创建版本标签的完整工作流。

概述

此工作流用于:

  • 自动分析暂存区变更
  • 根据 Conventional Commits 规范生成提交信息
  • 检测项目类型并更新版本号
  • 创建语义化版本标签

执行步骤

步骤 1: 检查暂存区

git diff --cached --name-only
  • 如果暂存区为空,通知用户并停止
  • 如果有文件,继续下一步

步骤 2: 收集信息(并行执行)

# 并行执行以下命令
git status
git diff --cached
git log --oneline -10
git tag --list | sort -V | tail -5

同时检查 AGENTS.md 文件获取:

  • 仓库类型polyrepo/monorepo
  • 版本规则
  • 项目结构信息

步骤 3: 检测仓库类型

Polyrepo单仓库

  • Tag 格式:<version>(如 1.2.0

Monorepo多项目

  • Tag 格式:<subproject>-<version>(如 ios-1.2.0
  • 检测特征:packages/apps/services/ 目录

步骤 4: 检测项目类型和版本

项目类型 版本文件 版本字段
iOS *.xcodeproj/project.pbxproj MARKETING_VERSION
Node.js package.json version
Android (Groovy) app/build.gradle versionName
Android (Kotlin) app/build.gradle.kts versionName
Go Git tag only -
Python pyproject.toml / setup.py version
Rust Cargo.toml version

步骤 5: 生成提交信息

遵循 Conventional Commits 格式:

<type>(<scope>): <subject>

提交类型

Type 描述 版本影响
feat 新功能 minor +1
fix Bug 修复 patch +1
perf 性能优化 patch +1
BREAKING CHANGE 破坏性变更 major +1
docs 文档更新
style 代码格式
refactor 重构
test 测试
chore 维护任务
ci CI/CD 变更
build 构建配置

提交语言

  • macOS/Linux使用中文
  • Windows使用英文避免编码问题

Monorepo Scope

  • 单项目变更:feat(ios): 添加上传功能
  • 多项目变更:chore: 更新共享依赖

步骤 6: 确定新版本号

根据提交类型计算新版本:

版本递增规则

  • featminor +11.2.01.3.0
  • fix/perfpatch +11.2.31.2.4
  • Breaking changemajor +11.2.32.0.0

不更新版本

  • docstestrefactorstylebuildcichore

步骤 7: 更新版本文件并暂存

如果需要更新版本(步骤 6 确定了新版本号):

  1. 更新版本文件:将版本号写入对应的版本文件
  2. 添加到暂存区
    git add <version-file>
    
  3. 验证暂存
    git diff --cached --name-only
    
    确认版本文件已在暂存区

步骤 8: 执行提交

git commit -m "<commit-message>"

步骤 9: 创建版本标签

仅在版本更新时创建(除非用户指定 "skip tag"

Polyrepo

git tag -a "1.2.0" -m "<commit-message>"

Monorepo

git tag -a "ios-1.2.0" -m "<commit-message>"

选项

  • skip tag / skip:跳过标签创建

输出格式

✓ 提交成功

提交信息:[commit message]
版本标签:[tag](如果创建了)

要推送到远程仓库,请运行:/git-push

注意事项

  • 此命令不会推送到远程,使用 /git-push 推送
  • 暂存区为空时会提示用户先 git add
  • 标签注释使用与提交相同的消息内容

相关文档