@zjex/git-workflow 0.2.24 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (92) hide show
  1. package/.github/workflows/deploy-docs.yml +68 -0
  2. package/.github/workflows/test.yml +24 -4
  3. package/.husky/pre-commit +14 -0
  4. package/README.md +72 -1066
  5. package/dist/index.js +103 -13
  6. package/docs/.vitepress/cache/deps/_metadata.json +52 -0
  7. package/docs/.vitepress/cache/deps/chunk-2CLQ7TTZ.js +9719 -0
  8. package/docs/.vitepress/cache/deps/chunk-2CLQ7TTZ.js.map +7 -0
  9. package/docs/.vitepress/cache/deps/chunk-LE5NDSFD.js +12824 -0
  10. package/docs/.vitepress/cache/deps/chunk-LE5NDSFD.js.map +7 -0
  11. package/docs/.vitepress/cache/deps/package.json +3 -0
  12. package/docs/.vitepress/cache/deps/vitepress___@vue_devtools-api.js +4505 -0
  13. package/docs/.vitepress/cache/deps/vitepress___@vue_devtools-api.js.map +7 -0
  14. package/docs/.vitepress/cache/deps/vitepress___@vueuse_core.js +583 -0
  15. package/docs/.vitepress/cache/deps/vitepress___@vueuse_core.js.map +7 -0
  16. package/docs/.vitepress/cache/deps/vitepress___@vueuse_integrations_useFocusTrap.js +1352 -0
  17. package/docs/.vitepress/cache/deps/vitepress___@vueuse_integrations_useFocusTrap.js.map +7 -0
  18. package/docs/.vitepress/cache/deps/vitepress___mark__js_src_vanilla__js.js +1665 -0
  19. package/docs/.vitepress/cache/deps/vitepress___mark__js_src_vanilla__js.js.map +7 -0
  20. package/docs/.vitepress/cache/deps/vitepress___minisearch.js +1813 -0
  21. package/docs/.vitepress/cache/deps/vitepress___minisearch.js.map +7 -0
  22. package/docs/.vitepress/cache/deps/vue.js +347 -0
  23. package/docs/.vitepress/cache/deps/vue.js.map +7 -0
  24. package/docs/.vitepress/cache/deps_temp_44e2fb0f/chunk-2CLQ7TTZ.js +9719 -0
  25. package/docs/.vitepress/cache/deps_temp_44e2fb0f/chunk-2CLQ7TTZ.js.map +7 -0
  26. package/docs/.vitepress/cache/deps_temp_44e2fb0f/chunk-LE5NDSFD.js +12824 -0
  27. package/docs/.vitepress/cache/deps_temp_44e2fb0f/chunk-LE5NDSFD.js.map +7 -0
  28. package/docs/.vitepress/cache/deps_temp_44e2fb0f/package.json +3 -0
  29. package/docs/.vitepress/cache/deps_temp_44e2fb0f/vitepress___@vue_devtools-api.js +4505 -0
  30. package/docs/.vitepress/cache/deps_temp_44e2fb0f/vitepress___@vue_devtools-api.js.map +7 -0
  31. package/docs/.vitepress/cache/deps_temp_44e2fb0f/vitepress___@vueuse_core.js +583 -0
  32. package/docs/.vitepress/cache/deps_temp_44e2fb0f/vitepress___@vueuse_core.js.map +7 -0
  33. package/docs/.vitepress/cache/deps_temp_44e2fb0f/vitepress___@vueuse_integrations_useFocusTrap.js +1352 -0
  34. package/docs/.vitepress/cache/deps_temp_44e2fb0f/vitepress___@vueuse_integrations_useFocusTrap.js.map +7 -0
  35. package/docs/.vitepress/cache/deps_temp_44e2fb0f/vitepress___mark__js_src_vanilla__js.js +1665 -0
  36. package/docs/.vitepress/cache/deps_temp_44e2fb0f/vitepress___mark__js_src_vanilla__js.js.map +7 -0
  37. package/docs/.vitepress/cache/deps_temp_44e2fb0f/vitepress___minisearch.js +1813 -0
  38. package/docs/.vitepress/cache/deps_temp_44e2fb0f/vitepress___minisearch.js.map +7 -0
  39. package/docs/.vitepress/cache/deps_temp_44e2fb0f/vue.js +347 -0
  40. package/docs/.vitepress/cache/deps_temp_44e2fb0f/vue.js.map +7 -0
  41. package/docs/.vitepress/config.ts +167 -0
  42. package/docs/.vitepress/theme/custom.css +39 -0
  43. package/docs/.vitepress/theme/index.ts +4 -0
  44. package/docs/README.md +82 -0
  45. package/docs/commands/branch.md +468 -0
  46. package/docs/commands/commit.md +554 -0
  47. package/docs/commands/config.md +346 -0
  48. package/docs/commands/index.md +312 -0
  49. package/docs/commands/interactive.md +384 -0
  50. package/docs/commands/release.md +300 -0
  51. package/docs/commands/stash.md +309 -0
  52. package/docs/commands/tag.md +278 -0
  53. package/docs/commands/update.md +347 -0
  54. package/docs/config/ai-config.md +160 -0
  55. package/docs/config/branch-config.md +133 -0
  56. package/docs/config/commit-config.md +185 -0
  57. package/docs/config/config-file.md +776 -0
  58. package/docs/config/examples.md +279 -0
  59. package/docs/config/index.md +478 -0
  60. package/docs/guide/ai-commit.md +576 -0
  61. package/docs/guide/basic-usage.md +522 -0
  62. package/docs/guide/best-practices.md +426 -0
  63. package/docs/guide/branch-management.md +712 -0
  64. package/docs/guide/getting-started.md +294 -0
  65. package/docs/guide/index.md +168 -0
  66. package/docs/guide/installation.md +449 -0
  67. package/docs/guide/release-management.md +744 -0
  68. package/docs/guide/stash-management.md +608 -0
  69. package/docs/guide/tag-management.md +614 -0
  70. package/docs/index.md +205 -0
  71. package/docs/public/favicon.svg +21 -0
  72. package/docs/public/hero-logo.svg +43 -0
  73. package/docs/public/logo.svg +20 -0
  74. package/package.json +11 -2
  75. package/scripts/publish.js +55 -8
  76. package/scripts/publish.sh +20 -2
  77. package/scripts/release.sh +20 -2
  78. package/scripts/update-test-count.js +55 -0
  79. package/src/ai-service.ts +101 -15
  80. package/src/commands/init.ts +18 -0
  81. package/src/config.ts +1 -0
  82. package/tests/ai-service.test.ts +237 -2
  83. package/tests/help.test.ts +134 -0
  84. package/tests/init.test.ts +582 -0
  85. package/tests/release.test.ts +333 -0
  86. package/tests/setup.ts +21 -0
  87. package/tests/stash.test.ts +376 -0
  88. package/tests/update.test.ts +402 -0
  89. package/vitest.config.ts +3 -0
  90. package/zjex-logo.svg +22 -0
  91. package/zjex-optimized.svg +34 -0
  92. package/zjex.svg +1 -0
@@ -0,0 +1,614 @@
1
+ # Tag 管理
2
+
3
+ Tag 管理是版本控制的重要组成部分,Git Workflow 提供了智能的标签创建、管理和版本递增功能。
4
+
5
+ ## 🏷️ Tag 管理理念
6
+
7
+ ### 语义化版本控制
8
+
9
+ Git Workflow 遵循 [Semantic Versioning](https://semver.org/lang/zh-CN/) 规范:
10
+
11
+ ```
12
+ 主版本号.次版本号.修订号[-预发布版本]
13
+
14
+ 例如:1.2.3-beta.1
15
+ ```
16
+
17
+ **版本递增规则:**
18
+ - **主版本号(Major)** - 不兼容的 API 修改
19
+ - **次版本号(Minor)** - 向下兼容的功能性新增
20
+ - **修订号(Patch)** - 向下兼容的问题修正
21
+ - **预发布版本** - alpha, beta, rc
22
+
23
+ ### 智能前缀检测
24
+
25
+ 自动检测仓库中已有的 tag 前缀:
26
+
27
+ ```bash
28
+ gw t
29
+ 检测到以下 tag 前缀:
30
+ ? 选择 tag 前缀:
31
+ ❯ v (最新: v1.2.0)
32
+ release- (最新: release-1.0.0)
33
+ @scope/pkg@ (最新: @scope/pkg@0.1.0)
34
+ + 使用新前缀
35
+ ```
36
+
37
+ ## 🎯 创建 Tag
38
+
39
+ ### 基本用法
40
+
41
+ ```bash
42
+ gw t
43
+ # 或使用别名
44
+ gw tag
45
+ ```
46
+
47
+ ### 智能版本选择
48
+
49
+ ```bash
50
+ gw t
51
+ ? 选择 tag 前缀: v (最新: v1.2.0)
52
+ ? 选择版本类型:
53
+ ❯ patch → v1.2.1
54
+ minor → v1.3.0
55
+ major → v2.0.0
56
+ alpha → v1.2.1-alpha.1
57
+ beta → v1.2.1-beta.1
58
+ rc → v1.2.1-rc.1
59
+ custom → 自定义版本号
60
+
61
+ ✔ Tag 创建成功: v1.2.1
62
+ ✔ Tag 已推送: v1.2.1
63
+ ```
64
+
65
+ ### 版本类型详解
66
+
67
+ #### 正式版本
68
+
69
+ | 类型 | 说明 | 示例变化 | 使用场景 |
70
+ | ------- | ------------------------ | --------------- | ------------------------ |
71
+ | patch | 修复 Bug,向下兼容 | 1.2.0 → 1.2.1 | Bug 修复、安全补丁 |
72
+ | minor | 新功能,向下兼容 | 1.2.0 → 1.3.0 | 新功能、API 扩展 |
73
+ | major | 破坏性变更,不向下兼容 | 1.2.0 → 2.0.0 | 重大重构、API 变更 |
74
+
75
+ #### 预发布版本
76
+
77
+ | 类型 | 说明 | 示例 | 使用场景 |
78
+ | ----- | ------------ | ------------------- | ------------------------ |
79
+ | alpha | 内测版本 | 1.2.1-alpha.1 | 早期开发、内部测试 |
80
+ | beta | 公测版本 | 1.2.1-beta.1 | 功能完整、公开测试 |
81
+ | rc | 候选发布版本 | 1.2.1-rc.1 | 发布前最终测试 |
82
+
83
+ ### 预发布版本管理
84
+
85
+ #### 从正式版本创建预发布版本
86
+
87
+ ```bash
88
+ # 当前版本: v1.2.0
89
+ gw t
90
+ ? 选择版本类型:
91
+ ❯ alpha → v1.2.1-alpha.1
92
+ beta → v1.2.1-beta.1
93
+ rc → v1.2.1-rc.1
94
+ ```
95
+
96
+ #### 预发布版本递增
97
+
98
+ ```bash
99
+ # 当前版本: v1.2.1-beta.1
100
+ gw t
101
+ ? 选择版本类型:
102
+ ❯ pre → v1.2.1-beta.2 # 预发布版本递增
103
+ release → v1.2.1 # 转为正式版本
104
+ patch → v1.2.2 # 跳过当前预发布,创建新的 patch
105
+ minor → v1.3.0 # 跳过当前预发布,创建新的 minor
106
+ major → v2.0.0 # 跳过当前预发布,创建新的 major
107
+ ```
108
+
109
+ #### 预发布版本转正
110
+
111
+ ```bash
112
+ # 当前版本: v1.2.1-rc.2
113
+ gw t
114
+ ? 选择版本类型:
115
+ ❯ release → v1.2.1 # 转为正式版本
116
+
117
+ ✔ Tag 创建成功: v1.2.1
118
+ ✔ 预发布版本已转为正式版本
119
+ ```
120
+
121
+ ### 自定义版本号
122
+
123
+ ```bash
124
+ gw t
125
+ ? 选择版本类型:
126
+ patch → v1.2.1
127
+ minor → v1.3.0
128
+ major → v2.0.0
129
+ ❯ custom → 自定义版本号
130
+
131
+ ? 输入自定义版本号: 2.0.0-beta.1
132
+ ✔ Tag 创建成功: v2.0.0-beta.1
133
+ ```
134
+
135
+ ### 指定前缀创建
136
+
137
+ ```bash
138
+ # 直接指定前缀
139
+ gw t v
140
+ gw t release-
141
+ gw t @scope/pkg@
142
+ ```
143
+
144
+ ## 📋 列出 Tags
145
+
146
+ ### 基本用法
147
+
148
+ ```bash
149
+ gw ts
150
+ # 或使用别名
151
+ gw tags
152
+ ```
153
+
154
+ ### 按前缀过滤
155
+
156
+ ```bash
157
+ # 列出所有 v 开头的标签
158
+ gw ts v
159
+
160
+ # 列出所有 release- 开头的标签
161
+ gw ts release-
162
+
163
+ # 列出所有标签
164
+ gw ts
165
+ ```
166
+
167
+ ### 标签列表显示
168
+
169
+ ```bash
170
+ gw ts v
171
+ 📋 标签列表 (前缀: v)
172
+
173
+ v2.1.0 (2 days ago) Latest release with new features
174
+ v2.0.1 (1 week ago) Hotfix for critical bug
175
+ v2.0.0 (2 weeks ago) Major release with breaking changes
176
+ v1.3.2 (3 weeks ago) Bug fixes and improvements
177
+ v1.3.1 (1 month ago) Security patch
178
+ v1.3.0 (1 month ago) New features and enhancements
179
+
180
+ 共 6 个标签
181
+ ```
182
+
183
+ **显示信息:**
184
+ - **标签名** - 完整的标签名称
185
+ - **时间** - 创建时间(相对时间)
186
+ - **消息** - 标签附带的消息(如果有)
187
+
188
+ ## 🗑️ 删除 Tags
189
+
190
+ ### 基本用法
191
+
192
+ ```bash
193
+ gw td
194
+ # 或使用别名
195
+ gw tag:delete
196
+ ```
197
+
198
+ ### 交互式删除
199
+
200
+ ```bash
201
+ gw td
202
+ ? 选择要删除的 tag:
203
+ ❯ v1.2.0 Release v1.2.0 (2 days ago)
204
+ v1.1.0 Release v1.1.0 (1 week ago)
205
+ v1.0.0 Initial release (2 weeks ago)
206
+ 取消
207
+
208
+ 分支信息:
209
+ 名称: v1.2.0
210
+ 创建时间: 2 days ago
211
+ 提交: a1b2c3d
212
+ 消息: Release v1.2.0
213
+ ────────────────────────────────────────
214
+ ? 确认删除 tag v1.2.0?
215
+ ❯ 是,删除本地和远程
216
+ 仅删除本地
217
+ 取消
218
+
219
+ ✔ 本地 tag 已删除: v1.2.0
220
+ ✔ 远程 tag 已删除: origin/v1.2.0
221
+ ```
222
+
223
+ ### 批量删除策略
224
+
225
+ #### 删除预发布版本
226
+
227
+ ```bash
228
+ # 删除所有 alpha 版本
229
+ git tag -l "*alpha*" | xargs git tag -d
230
+ git tag -l "*alpha*" | xargs -I {} git push origin :refs/tags/{}
231
+
232
+ # 删除所有 beta 版本
233
+ git tag -l "*beta*" | xargs git tag -d
234
+ git tag -l "*beta*" | xargs -I {} git push origin :refs/tags/{}
235
+ ```
236
+
237
+ #### 删除过期版本
238
+
239
+ ```bash
240
+ # 删除 6 个月前的标签
241
+ git for-each-ref --format='%(refname:short) %(creatordate:unix)' refs/tags | \
242
+ awk '$2 < '$(date -d '6 months ago' +%s)' {print $1}' | \
243
+ xargs git tag -d
244
+ ```
245
+
246
+ ## ✏️ 修改 Tags
247
+
248
+ ### 基本用法
249
+
250
+ ```bash
251
+ gw tu
252
+ # 或使用别名
253
+ gw tag:update
254
+ ```
255
+
256
+ ### 修改标签消息
257
+
258
+ ```bash
259
+ gw tu
260
+ ? 选择要修改的 tag:
261
+ ❯ v1.2.0 Release v1.2.0 (2 days ago)
262
+ v1.1.0 Release v1.1.0 (1 week ago)
263
+
264
+ 当前消息: Release v1.2.0
265
+ ? 输入新的 tag 消息: Release v1.2.0 - Bug fixes and performance improvements
266
+
267
+ ✔ Tag 消息已更新: v1.2.0
268
+ ✔ 已推送到远程
269
+ ```
270
+
271
+ ### 修改标签指向
272
+
273
+ ```bash
274
+ # 手动修改标签指向的提交
275
+ git tag -f v1.2.0 abc1234
276
+ git push origin v1.2.0 --force
277
+ ```
278
+
279
+ ## 🎯 Tag 使用场景
280
+
281
+ ### 场景一:版本发布流程
282
+
283
+ ```bash
284
+ # 1. 开发完成,准备发布
285
+ gw c # 最后的提交
286
+
287
+ # 2. 创建预发布版本进行测试
288
+ gw t
289
+ # 选择: beta → v1.3.0-beta.1
290
+
291
+ # 3. 测试发现问题,修复后递增预发布版本
292
+ gw c # 修复提交
293
+ gw t
294
+ # 选择: pre → v1.3.0-beta.2
295
+
296
+ # 4. 测试通过,创建候选版本
297
+ gw t
298
+ # 选择: rc → v1.3.0-rc.1
299
+
300
+ # 5. 最终测试通过,发布正式版本
301
+ gw t
302
+ # 选择: release → v1.3.0
303
+ ```
304
+
305
+ ### 场景二:紧急修复发布
306
+
307
+ ```bash
308
+ # 1. 发现生产环境 Bug
309
+ gw h --base main
310
+ # BUG-456, fix-critical-security-issue
311
+
312
+ # 2. 修复问题
313
+ gw c
314
+ # 🐛 fix(security): 修复 SQL 注入漏洞
315
+
316
+ # 3. 立即发布补丁版本
317
+ gw t
318
+ # 选择: patch → v1.2.1
319
+
320
+ # 4. 部署到生产环境
321
+ ```
322
+
323
+ ### 场景三:功能预览版本
324
+
325
+ ```bash
326
+ # 1. 新功能开发完成
327
+ gw f
328
+ # PROJ-123, add-new-dashboard
329
+
330
+ gw c
331
+ # ✨ feat(dashboard): 添加新的仪表板功能
332
+
333
+ # 2. 创建 alpha 版本供内部测试
334
+ gw t
335
+ # 选择: alpha → v1.3.0-alpha.1
336
+
337
+ # 3. 收集反馈,改进功能
338
+ gw c
339
+ # 💄 style(dashboard): 优化界面布局
340
+
341
+ gw t
342
+ # 选择: pre → v1.3.0-alpha.2
343
+
344
+ # 4. 功能稳定后创建 beta 版本
345
+ gw t
346
+ # 选择: beta → v1.3.0-beta.1
347
+ ```
348
+
349
+ ### 场景四:多版本维护
350
+
351
+ ```bash
352
+ # 维护多个版本分支
353
+ # v1.x 分支
354
+ git checkout release/1.x
355
+ gw t
356
+ # 选择: patch → v1.2.3
357
+
358
+ # v2.x 分支
359
+ git checkout release/2.x
360
+ gw t
361
+ # 选择: patch → v2.1.1
362
+
363
+ # 主开发分支
364
+ git checkout main
365
+ gw t
366
+ # 选择: minor → v2.2.0
367
+ ```
368
+
369
+ ## 🔧 高级 Tag 技巧
370
+
371
+ ### 技巧一:带签名的标签
372
+
373
+ ```bash
374
+ # 创建 GPG 签名标签
375
+ git tag -s v1.2.0 -m "Release v1.2.0"
376
+
377
+ # 验证签名
378
+ git tag -v v1.2.0
379
+ ```
380
+
381
+ ### 技巧二:标签与分支关联
382
+
383
+ ```bash
384
+ # 查看标签对应的分支
385
+ git branch --contains v1.2.0
386
+
387
+ # 查看标签之间的差异
388
+ git diff v1.1.0..v1.2.0
389
+
390
+ # 基于标签创建分支
391
+ git checkout -b hotfix/v1.2.1 v1.2.0
392
+ ```
393
+
394
+ ### 技巧三:标签搜索和过滤
395
+
396
+ ```bash
397
+ # 搜索包含特定模式的标签
398
+ git tag -l "v1.2.*"
399
+ git tag -l "*beta*"
400
+ git tag -l "*rc*"
401
+
402
+ # 按时间排序标签
403
+ git tag --sort=-creatordate
404
+ git tag --sort=version:refname
405
+ ```
406
+
407
+ ### 技巧四:标签与 CI/CD 集成
408
+
409
+ ```bash
410
+ # GitHub Actions 示例
411
+ name: Release
412
+ on:
413
+ push:
414
+ tags:
415
+ - 'v*'
416
+
417
+ jobs:
418
+ release:
419
+ runs-on: ubuntu-latest
420
+ steps:
421
+ - name: Create Release
422
+ if: startsWith(github.ref, 'refs/tags/v')
423
+ run: |
424
+ echo "Creating release for ${GITHUB_REF#refs/tags/}"
425
+ ```
426
+
427
+ ## ⚙️ Tag 配置管理
428
+
429
+ ### 默认前缀配置
430
+
431
+ ```json
432
+ {
433
+ "defaultTagPrefix": "v"
434
+ }
435
+ ```
436
+
437
+ 设置后,创建标签时会跳过前缀选择步骤。
438
+
439
+ ### 版本格式配置
440
+
441
+ ```json
442
+ {
443
+ "tagFormat": {
444
+ "prefix": "v",
445
+ "separator": ".",
446
+ "prerelease": {
447
+ "alpha": "alpha",
448
+ "beta": "beta",
449
+ "rc": "rc"
450
+ }
451
+ }
452
+ }
453
+ ```
454
+
455
+ ### 自动推送配置
456
+
457
+ ```json
458
+ {
459
+ "tagAutoPush": true
460
+ }
461
+ ```
462
+
463
+ 创建标签后自动推送到远程仓库。
464
+
465
+ ## 📊 Tag 管理度量
466
+
467
+ ### 版本发布频率
468
+
469
+ ```bash
470
+ #!/bin/bash
471
+ # tag-metrics.sh
472
+
473
+ echo "=== Tag 管理度量报告 ==="
474
+ echo "时间: $(date)"
475
+ echo
476
+
477
+ # 版本发布统计
478
+ echo "📊 版本发布统计:"
479
+ git tag --sort=-creatordate | head -10 | while read tag; do
480
+ date=$(git log -1 --format=%ai $tag)
481
+ echo "$tag - $date"
482
+ done
483
+ echo
484
+
485
+ # 版本类型分布
486
+ echo "📊 版本类型分布:"
487
+ echo "正式版本: $(git tag -l | grep -v -E '(alpha|beta|rc)' | wc -l)"
488
+ echo "Alpha 版本: $(git tag -l | grep alpha | wc -l)"
489
+ echo "Beta 版本: $(git tag -l | grep beta | wc -l)"
490
+ echo "RC 版本: $(git tag -l | grep rc | wc -l)"
491
+ echo
492
+
493
+ # 发布间隔分析
494
+ echo "📊 发布间隔分析:"
495
+ git tag --sort=-creatordate | head -5 | while read tag; do
496
+ commits=$(git rev-list --count ${tag}..HEAD 2>/dev/null || echo "0")
497
+ echo "$tag: $commits commits behind HEAD"
498
+ done
499
+ ```
500
+
501
+ ### 版本质量度量
502
+
503
+ ```bash
504
+ # 统计每个版本的提交数量
505
+ git tag --sort=-creatordate | head -10 | while read current; do
506
+ previous=$(git tag --sort=-creatordate | grep -A1 "^$current$" | tail -1)
507
+ if [ "$previous" != "$current" ] && [ -n "$previous" ]; then
508
+ commits=$(git rev-list --count $previous..$current)
509
+ echo "$current: $commits commits"
510
+ fi
511
+ done
512
+ ```
513
+
514
+ ## 🚨 常见问题解决
515
+
516
+ ### 问题一:标签已存在
517
+
518
+ ```bash
519
+ ❌ 标签 'v1.2.0' 已存在
520
+ ```
521
+
522
+ **解决方案:**
523
+ ```bash
524
+ # 删除现有标签
525
+ git tag -d v1.2.0
526
+ git push origin :refs/tags/v1.2.0
527
+
528
+ # 重新创建
529
+ gw t
530
+ ```
531
+
532
+ ### 问题二:无法推送标签
533
+
534
+ ```bash
535
+ ❌ 标签推送失败: 权限不足
536
+ ```
537
+
538
+ **解决方案:**
539
+ 1. 检查推送权限
540
+ 2. 手动推送:`git push origin v1.2.0`
541
+ 3. 联系仓库管理员
542
+
543
+ ### 问题三:版本号格式错误
544
+
545
+ ```bash
546
+ ❌ 版本号格式不正确: 1.2.3.4
547
+ ```
548
+
549
+ **解决方案:**
550
+ - 遵循 semver 格式:`major.minor.patch[-prerelease]`
551
+ - 使用工具提供的版本选择而不是自定义
552
+
553
+ ### 问题四:标签与提交不匹配
554
+
555
+ ```bash
556
+ ❌ 标签指向的提交不存在
557
+ ```
558
+
559
+ **解决方案:**
560
+ ```bash
561
+ # 检查提交是否存在
562
+ git log --oneline -n 10
563
+
564
+ # 重新创建标签
565
+ git tag v1.2.0 <correct-commit-hash>
566
+ ```
567
+
568
+ ## 🔗 与其他功能集成
569
+
570
+ ### 与分支管理集成
571
+
572
+ ```bash
573
+ # 功能开发完成后创建标签
574
+ gw f # 创建功能分支
575
+ gw c # 提交代码
576
+ gw t # 创建版本标签
577
+ gw d # 删除功能分支
578
+ ```
579
+
580
+ ### 与版本发布集成
581
+
582
+ ```bash
583
+ # 更新 package.json 版本
584
+ gw r # 选择版本类型
585
+
586
+ # 创建对应的 git 标签
587
+ gw t # 创建相同版本的标签
588
+ ```
589
+
590
+ ### 与 CI/CD 集成
591
+
592
+ ```yaml
593
+ # .github/workflows/release.yml
594
+ name: Release
595
+ on:
596
+ push:
597
+ tags:
598
+ - 'v*'
599
+
600
+ jobs:
601
+ release:
602
+ runs-on: ubuntu-latest
603
+ steps:
604
+ - uses: actions/checkout@v3
605
+ - name: Get tag version
606
+ run: echo "VERSION=${GITHUB_REF#refs/tags/}" >> $GITHUB_ENV
607
+ - name: Create Release
608
+ run: |
609
+ echo "Creating release for $VERSION"
610
+ ```
611
+
612
+ ---
613
+
614
+ 通过系统化的 Tag 管理,你可以建立清晰的版本发布流程。Git Workflow 的智能版本递增和前缀检测功能,让版本管理变得简单而规范。