Git バージョン管理自動化規約
トリガー条件
- Conventional Commit メッセージを生成する
- セマンティックバージョニングを管理する
- Git タグを作成する
- 変更履歴を生成する
- リリースノートを生成する
- バージョンリリースのワークフローを自動化する
Part 1: コミットメッセージの規約
1.1 フォーマット
<type>(<scope>): <subject>
<body>
<footer>
1.2 Type の種類
| Type | 説明 | 例 |
|---|
feat | 新機能 | feat(user): 添加用户登录功能 |
fix | バグ修正 | fix(auth): 修复 Token 过期验证问题 |
docs | ドキュメントの更新 | docs(readme): 更新安装说明 |
style | コードのフォーマット(機能に影響しない変更) | style: 格式化代码缩进 |
refactor | リファクタリング(新機能の追加やバグ修正ではない変更) | refactor(user): 重构用户服务层 |
perf | パフォーマンスの最適化 | perf(query): 优化分页查询性能 |
test | テスト関連 | test(user): 添加用户服务单元测试 |
chore | ビルド/ツール関連 | chore: 更新依赖版本 |
ci | CI/CD 関連 | ci: 添加 GitHub Actions 工作流 |
build | ビルドシステム関連 | build: 升级 webpack 配置 |
revert | コミットの取り消し | revert: 回滚用户登录功能 |
1.3 Scope の範囲
| Scope | 説明 |
|---|
auth | 認証・認可 |
user / role / menu / dept / dict / notice | ビジネスモジュール |
log / file / api | ログ/ファイル/インターフェース |
db / config / deps | データベース/設定/依存関係 |
1.4 自動生成の手順
- 変更を分析する:
git diff --cached --stat && git diff --cached --name-status
- 種類を識別する:新規ファイル →
feat、設定の変更 → chore、ファイルの削除 → refactor
- メッセージの生成例:
feat(user): 添加用户头像上传功能
- 支持 JPG/PNG 格式
- 限制文件大小 2MB
- 自动压缩图片
Part 2: セマンティックバージョニングの規約
2.1 バージョン形式
MAJOR.MINOR.PATCH[-PRERELEASE][+BUILD]
| 部分 | 説明 | 更新のタイミング |
|---|
| MAJOR | メジャーバージョン | 互換性のない API の変更 |
| MINOR | マイナーバージョン | 後方互換性のある機能追加 |
| PATCH | パッチバージョン | 後方互換性のある問題の修正 |
| PRERELEASE | プレリリース識別子 | alpha、beta、rc |
2.2 バージョンのインクリメント規則
| Commit Type | バージョンのインクリメント |
|---|
feat | MINOR +1、PATCH = 0 |
fix | PATCH +1 |
feat! または BREAKING CHANGE | MAJOR +1、MINOR = 0、PATCH = 0 |
docs / style / refactor / test / chore | インクリメントしない |
2.3 プレリリースバージョン
| 段階 | バージョン例 | 説明 |
|---|
| Alpha | 1.0.0-alpha.1 | 内部テスト |
| Beta | 1.0.0-beta.1 | 公開テスト |
| Release Candidate | 1.0.0-rc.1 | リリース候補 |
| Release | 1.0.0 | 正式リリース |
2.4 バージョンファイルの同期
| プロジェクトの種類 | バージョンファイル | 更新方法 |
|---|
| Node.js | package.json | version フィールドを変更 |
| Java Maven | pom.xml | <version> タグを変更 |
| Python | pyproject.toml | version フィールドを変更 |
| Go | 任意または省略 | — |
Part 3: Git タグの規約
3.1 命名形式
| 種類 | 形式 | 例 |
|---|
| 正式リリース | v{VERSION} | v1.0.0 |
| プレリリース | v{VERSION}-{PRERELEASE}.{N} | v1.0.0-beta.1 |
3.2 注釈付きタグの作成
git tag -a v1.0.0 -m "Release v1.0.0
Features:
- 用户登录功能
- 角色权限管理
Fixes:
- 修复 Token 过期问题"
3.3 よく使うコマンド
git tag -l # 列出所有 Tag
git tag -l "v1.*" # 匹配 Tag
git show v1.0.0 # 查看 Tag 详情
git tag -d v1.0.0 # 删除本地 Tag
git push origin --delete v1.0.0 # 删除远程 Tag
git push origin v1.0.0 # 推送单个 Tag
git push origin --tags # 推送所有 Tag
Part 4: 変更履歴の規約
4.1 フォーマットのテンプレート
Keep a Changelog に基づきます:
# Changelog
## [Unreleased]
### Added / Changed / Deprecated / Removed / Fixed / Security
## [1.0.0] - 2024-01-15
### Added
- 用户登录功能
- 角色权限管理
### Fixed
- 修复 Token 过期验证问题 (#123)
### Security
- 升级 JWT 库修复安全漏洞
4.2 変更の分類
| 分類 | 説明 |
|---|
| Added | 新機能 |
| Changed | 機能の変更 |
| Deprecated | 非推奨化 |
| Removed | 削除済み |
| Fixed | バグ修正 |
| Security | セキュリティ関連 |
4.3 自動生成
git log v0.9.0..v1.0.0 --pretty=format:"%s" | grep "^feat" | sed 's/feat/### Added/'
git log v0.9.0..v1.0.0 --pretty=format:"%s" | grep "^fix" | sed 's/fix/### Fixed/'
Part 5: リリースノートの規約
# Release v1.0.0
## 🎉 新功能
### 用户管理
- **用户登录** - 支持 JWT 和 Redis Token 两种认证模式
- **角色权限** - 基于 RBAC 的细粒度权限控制
## 🐛 Bug 修复
- 修复 Token 过期后前端未正确跳转登录页的问题 (#123)
## 💥 重大变更
- API 路径统一调整为 `/api/v1/` 前缀
## 📦 依赖更新
- 升级 Spring Boot 至 3.2.0
## 完整变更日志
查看 [CHANGELOG.md](./CHANGELOG.md) 获取完整变更记录。
Part 6: 自動化ワークフロー
6.1 標準リリース手順
1. git status — 检查工作区状态
2. git checkout main && git pull — 确保在主分支
3. git add . && git commit -m "..." — 提交变更
4. git push origin main — 推送
5. 确定版本号 → 更新版本文件 — version bump
6. git add . && git commit -m "chore: release vX.X.X"
7. git tag -a vX.X.X -m "Release vX.X.X"
8. git push origin vX.X.X — 推送 Tag
9. git push origin main — 推送版本更新提交
⚠️ 順序に注意してください:コードをコミット → タグを作成 → バージョンファイルを更新 → バージョン更新をコミット → プッシュ
6.2 バージョンリリースのチェックリスト
Part 7: Windows PowerShell との互換性
| Bash | PowerShell | 説明 |
|---|
cmd1 && cmd2 | cmd1; cmd2 または個別に実行 | PowerShell は && をサポートしていません |
head -5 | Select-Object -First 5 | head はありません |
grep | Select-String または findstr | grep はありません |
sed | -replace | sed はありません |
# Windows 示例
git add .
git commit -m "feat: 新功能"
git push
# 查看最近 5 个 Tag
git tag -l "v*" --sort=-v:refname | Select-Object -First 5
Part 8: よくある問題
プッシュが拒否される
# Rebase(推荐,保持历史线性)
git pull --rebase origin master
git push origin master
Rebase 後にコミットが失われる
git reflog -10 # 查找丢失的提交
git cherry-pick <commit-hash> # 恢复
git push origin master
タグが誤ったコミットに作成された
git tag -d v1.0.0 # 删本地
git push origin --delete v1.0.0 # 删远程
git tag -a v1.0.0 <correct-hash> -m "Release v1.0.0"
git push origin v1.0.0
Part 9: よくあるアンチパターン
| アンチパターン | 正しい方法 |
|---|
git add -A && git commit -m "update" | 段階的にステージングし、意味のあるメッセージを書く |
git push --force で main/master にプッシュする | --force-with-lease を使うか、禁止する |
-a もメッセージもないタグ | git tag -a v1.0.0 -m "Release v1.0.0" |
スコープや詳細のないコミットメッセージ fix bug | fix(auth): 修复 Token 过期后无限循环刷新 |
| バージョン番号をインクリメントせずに飛ばす | feat → MINOR+1、fix → PATCH+1 |
| CHANGELOG を更新せずにリリースする | 変更履歴とタグを同時に更新する |