@zjex/git-workflow 0.2.24 → 0.3.2

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 (99) hide show
  1. package/.github/workflows/deploy-docs.yml +68 -0
  2. package/.github/workflows/test.yml +24 -4
  3. package/.husky/pre-commit +17 -0
  4. package/README.md +72 -1066
  5. package/ROADMAP.md +275 -0
  6. package/dist/index.js +450 -99
  7. package/docs/.vitepress/cache/deps/_metadata.json +52 -0
  8. package/docs/.vitepress/cache/deps/chunk-2CLQ7TTZ.js +9719 -0
  9. package/docs/.vitepress/cache/deps/chunk-2CLQ7TTZ.js.map +7 -0
  10. package/docs/.vitepress/cache/deps/chunk-LE5NDSFD.js +12824 -0
  11. package/docs/.vitepress/cache/deps/chunk-LE5NDSFD.js.map +7 -0
  12. package/docs/.vitepress/cache/deps/package.json +3 -0
  13. package/docs/.vitepress/cache/deps/vitepress___@vue_devtools-api.js +4505 -0
  14. package/docs/.vitepress/cache/deps/vitepress___@vue_devtools-api.js.map +7 -0
  15. package/docs/.vitepress/cache/deps/vitepress___@vueuse_core.js +583 -0
  16. package/docs/.vitepress/cache/deps/vitepress___@vueuse_core.js.map +7 -0
  17. package/docs/.vitepress/cache/deps/vitepress___@vueuse_integrations_useFocusTrap.js +1352 -0
  18. package/docs/.vitepress/cache/deps/vitepress___@vueuse_integrations_useFocusTrap.js.map +7 -0
  19. package/docs/.vitepress/cache/deps/vitepress___mark__js_src_vanilla__js.js +1665 -0
  20. package/docs/.vitepress/cache/deps/vitepress___mark__js_src_vanilla__js.js.map +7 -0
  21. package/docs/.vitepress/cache/deps/vitepress___minisearch.js +1813 -0
  22. package/docs/.vitepress/cache/deps/vitepress___minisearch.js.map +7 -0
  23. package/docs/.vitepress/cache/deps/vue.js +347 -0
  24. package/docs/.vitepress/cache/deps/vue.js.map +7 -0
  25. package/docs/.vitepress/cache/deps_temp_44e2fb0f/chunk-2CLQ7TTZ.js +9719 -0
  26. package/docs/.vitepress/cache/deps_temp_44e2fb0f/chunk-2CLQ7TTZ.js.map +7 -0
  27. package/docs/.vitepress/cache/deps_temp_44e2fb0f/chunk-LE5NDSFD.js +12824 -0
  28. package/docs/.vitepress/cache/deps_temp_44e2fb0f/chunk-LE5NDSFD.js.map +7 -0
  29. package/docs/.vitepress/cache/deps_temp_44e2fb0f/package.json +3 -0
  30. package/docs/.vitepress/cache/deps_temp_44e2fb0f/vitepress___@vue_devtools-api.js +4505 -0
  31. package/docs/.vitepress/cache/deps_temp_44e2fb0f/vitepress___@vue_devtools-api.js.map +7 -0
  32. package/docs/.vitepress/cache/deps_temp_44e2fb0f/vitepress___@vueuse_core.js +583 -0
  33. package/docs/.vitepress/cache/deps_temp_44e2fb0f/vitepress___@vueuse_core.js.map +7 -0
  34. package/docs/.vitepress/cache/deps_temp_44e2fb0f/vitepress___@vueuse_integrations_useFocusTrap.js +1352 -0
  35. package/docs/.vitepress/cache/deps_temp_44e2fb0f/vitepress___@vueuse_integrations_useFocusTrap.js.map +7 -0
  36. package/docs/.vitepress/cache/deps_temp_44e2fb0f/vitepress___mark__js_src_vanilla__js.js +1665 -0
  37. package/docs/.vitepress/cache/deps_temp_44e2fb0f/vitepress___mark__js_src_vanilla__js.js.map +7 -0
  38. package/docs/.vitepress/cache/deps_temp_44e2fb0f/vitepress___minisearch.js +1813 -0
  39. package/docs/.vitepress/cache/deps_temp_44e2fb0f/vitepress___minisearch.js.map +7 -0
  40. package/docs/.vitepress/cache/deps_temp_44e2fb0f/vue.js +347 -0
  41. package/docs/.vitepress/cache/deps_temp_44e2fb0f/vue.js.map +7 -0
  42. package/docs/.vitepress/config.ts +167 -0
  43. package/docs/.vitepress/theme/custom.css +39 -0
  44. package/docs/.vitepress/theme/index.ts +4 -0
  45. package/docs/README.md +82 -0
  46. package/docs/commands/branch.md +468 -0
  47. package/docs/commands/commit.md +554 -0
  48. package/docs/commands/config.md +346 -0
  49. package/docs/commands/index.md +312 -0
  50. package/docs/commands/interactive.md +384 -0
  51. package/docs/commands/release.md +300 -0
  52. package/docs/commands/stash.md +309 -0
  53. package/docs/commands/tag.md +278 -0
  54. package/docs/commands/update.md +347 -0
  55. package/docs/config/ai-config.md +160 -0
  56. package/docs/config/branch-config.md +133 -0
  57. package/docs/config/commit-config.md +185 -0
  58. package/docs/config/config-file.md +776 -0
  59. package/docs/config/examples.md +279 -0
  60. package/docs/config/index.md +478 -0
  61. package/docs/features/git-wrapped.md +199 -0
  62. package/docs/guide/ai-commit.md +576 -0
  63. package/docs/guide/basic-usage.md +522 -0
  64. package/docs/guide/best-practices.md +426 -0
  65. package/docs/guide/branch-management.md +712 -0
  66. package/docs/guide/getting-started.md +294 -0
  67. package/docs/guide/index.md +168 -0
  68. package/docs/guide/installation.md +449 -0
  69. package/docs/guide/release-management.md +744 -0
  70. package/docs/guide/stash-management.md +608 -0
  71. package/docs/guide/tag-management.md +614 -0
  72. package/docs/index.md +205 -0
  73. package/docs/public/favicon.svg +21 -0
  74. package/docs/public/hero-logo.svg +43 -0
  75. package/docs/public/logo.svg +20 -0
  76. package/package.json +12 -2
  77. package/scripts/publish.js +55 -8
  78. package/scripts/publish.sh +20 -2
  79. package/scripts/release.sh +81 -3
  80. package/scripts/update-test-count.js +55 -0
  81. package/src/ai-service.ts +107 -15
  82. package/src/commands/commit.ts +4 -0
  83. package/src/commands/init.ts +18 -0
  84. package/src/commands/log.ts +503 -0
  85. package/src/config.ts +1 -0
  86. package/src/index.ts +37 -13
  87. package/src/utils.ts +10 -0
  88. package/tests/ai-service.test.ts +237 -2
  89. package/tests/init.test.ts +582 -0
  90. package/tests/log.test.ts +106 -0
  91. package/tests/release.test.ts +333 -0
  92. package/tests/setup.ts +21 -0
  93. package/tests/stash.test.ts +376 -0
  94. package/tests/update.test.ts +402 -0
  95. package/vitest.config.ts +3 -0
  96. package/zjex-logo.svg +22 -0
  97. package/zjex-optimized.svg +34 -0
  98. package/zjex.svg +1 -0
  99. package/src/commands/help.ts +0 -76
@@ -0,0 +1,468 @@
1
+ # 分支命令
2
+
3
+ 分支管理是 Git Workflow 的核心功能之一,提供了创建和删除分支的简化操作。
4
+
5
+ ## 📋 命令概览
6
+
7
+ | 命令 | 别名 | 功能 |
8
+ | ------------------------------ | ----------------- | ----------------- |
9
+ | `gw feature [--base <branch>]` | `gw feat`, `gw f` | 创建 feature 分支 |
10
+ | `gw hotfix [--base <branch>]` | `gw fix`, `gw h` | 创建 hotfix 分支 |
11
+ | `gw delete [branch]` | `gw del`, `gw d` | 删除本地/远程分支 |
12
+
13
+ ## ✨ 创建 Feature 分支
14
+
15
+ ### 基本用法
16
+
17
+ ```bash
18
+ gw f
19
+ # 或
20
+ gw feature
21
+ gw feat
22
+ ```
23
+
24
+ ### 交互式流程
25
+
26
+ ```bash
27
+ gw f
28
+ ? 请输入 Story ID (可跳过): PROJ-123
29
+ ? 请输入描述: add-user-login
30
+ ✔ 分支创建成功: feature/20260111-PROJ-123-add-user-login
31
+ ? 是否推送到远程? 是
32
+ ✔ 已推送到远程: origin/feature/20260111-PROJ-123-add-user-login
33
+ ```
34
+
35
+ ### 高级选项
36
+
37
+ #### 指定基础分支
38
+
39
+ ```bash
40
+ # 基于 develop 分支创建
41
+ gw f --base develop
42
+
43
+ # 基于指定分支创建
44
+ gw f --base release/1.0
45
+ ```
46
+
47
+ #### 自动检测基础分支
48
+
49
+ 如果不指定 `--base` 参数,Git Workflow 会自动检测:
50
+
51
+ 1. 检查配置文件中的 `baseBranch` 设置
52
+ 2. 自动检测 `main` 或 `master` 分支
53
+ 3. 使用当前分支作为基础分支
54
+
55
+ ### 分支命名规范
56
+
57
+ **生成格式:**
58
+ ```
59
+ feature/YYYYMMDD-[ID-]description
60
+ ```
61
+
62
+ **示例:**
63
+ ```bash
64
+ # 有 ID 的情况
65
+ feature/20260111-PROJ-123-add-user-login
66
+
67
+ # 无 ID 的情况(跳过 ID 输入)
68
+ feature/20260111-add-user-login
69
+ ```
70
+
71
+ **命名优势:**
72
+ - 📅 **时间排序** - 按创建日期自然排序
73
+ - 🔍 **易于搜索** - 可以按日期或 ID 快速查找
74
+ - 📋 **可追溯性** - 每个分支都能追溯到具体需求
75
+ - 🤖 **自动生成** - 无需手动输入复杂的分支名
76
+
77
+ ### 未提交更改处理
78
+
79
+ 如果当前分支有未提交的更改,Git Workflow 会智能处理:
80
+
81
+ ```bash
82
+ gw f
83
+ # 检测到未提交的更改:
84
+ # M src/index.ts
85
+ # M src/utils.ts
86
+ # ────────────────────────────────────────
87
+ # ? 是否暂存 (stash) 这些更改后继续?
88
+ # 是,暂存更改并创建分支
89
+ # 否,取消操作
90
+ ```
91
+
92
+ 选择"是"后:
93
+ ```bash
94
+ ✔ 更改已暂存到 stash
95
+ ✔ 分支创建成功: feature/20260111-PROJ-123-add-login
96
+ 💡 提示: 使用 'gw s' 可以恢复暂存的更改
97
+ ```
98
+
99
+ ## 🐛 创建 Hotfix 分支
100
+
101
+ ### 基本用法
102
+
103
+ ```bash
104
+ gw h
105
+ # 或
106
+ gw hotfix
107
+ gw fix
108
+ ```
109
+
110
+ ### 交互式流程
111
+
112
+ ```bash
113
+ gw h
114
+ ? 请输入 Issue ID (可跳过): BUG-456
115
+ ? 请输入描述: fix-login-crash
116
+ ✔ 分支创建成功: hotfix/20260111-BUG-456-fix-login-crash
117
+ ? 是否推送到远程? 是
118
+ ✔ 已推送到远程: origin/hotfix/20260111-BUG-456-fix-login-crash
119
+ ```
120
+
121
+ ### Hotfix 特点
122
+
123
+ **与 Feature 分支的区别:**
124
+ - 🚨 **紧急性** - 用于紧急修复生产环境问题
125
+ - 🎯 **基础分支** - 通常基于 `main` 分支创建
126
+ - 🔄 **合并策略** - 需要同时合并到 `main` 和 `develop`
127
+ - 📝 **ID 标签** - 默认提示 "Issue ID" 而不是 "Story ID"
128
+
129
+ **典型使用场景:**
130
+ - 生产环境 Bug 修复
131
+ - 安全漏洞修复
132
+ - 关键功能故障修复
133
+ - 性能问题紧急优化
134
+
135
+ ## 🗑️ 删除分支
136
+
137
+ ### 基本用法
138
+
139
+ ```bash
140
+ gw d
141
+ # 或
142
+ gw delete
143
+ gw del
144
+ ```
145
+
146
+ ### 交互式选择
147
+
148
+ ```bash
149
+ gw d
150
+ ? 选择要删除的分支:
151
+ ❯ feature/20260105-PROJ-100-old-feature (本地+远程) 3 days ago
152
+ feature/20260103-test-branch (仅本地) 5 days ago
153
+ hotfix/20260101-BUG-200-urgent-fix (本地+远程) 1 week ago
154
+ 取消
155
+ ```
156
+
157
+ **分支信息说明:**
158
+ - **分支名** - 完整的分支名称
159
+ - **状态** - 显示是否存在远程分支
160
+ - **时间** - 最后提交时间,按最近使用排序
161
+
162
+ ### 删除确认
163
+
164
+ 选择分支后会显示详细信息并确认:
165
+
166
+ ```bash
167
+ 分支信息:
168
+ 名称: feature/20260105-PROJ-100-old-feature
169
+ 最后提交: 3 days ago
170
+ 提交信息: feat(user): 添加用户管理功能
171
+ 状态: 本地+远程分支都存在
172
+ ────────────────────────────────────────
173
+ ? 确认删除?
174
+ ❯ 是,删除本地和远程分支
175
+ 仅删除本地分支
176
+ 取消
177
+ ```
178
+
179
+ ### 删除结果
180
+
181
+ ```bash
182
+ ✔ 本地分支已删除: feature/20260105-PROJ-100-old-feature
183
+ ✔ 远程分支已删除: origin/feature/20260105-PROJ-100-old-feature
184
+ ```
185
+
186
+ ### 直接删除指定分支
187
+
188
+ ```bash
189
+ # 直接删除指定分支
190
+ gw d feature/old-branch
191
+
192
+ # 系统会自动检测并询问是否删除远程分支
193
+ ```
194
+
195
+ ### 批量删除
196
+
197
+ 虽然不支持多选,但可以连续删除:
198
+
199
+ ```bash
200
+ gw d
201
+ # 删除第一个分支后,会自动返回分支列表
202
+ # 可以继续选择删除其他分支
203
+ ```
204
+
205
+ ### 安全保护
206
+
207
+ **保护机制:**
208
+ - 🛡️ **当前分支保护** - 不能删除当前所在的分支
209
+ - 🛡️ **主分支保护** - 不会显示 main/master/develop 等主分支
210
+ - 🛡️ **确认机制** - 删除前需要明确确认
211
+ - 🛡️ **状态检查** - 显示分支的本地/远程状态
212
+
213
+ **错误处理:**
214
+ ```bash
215
+ ❌ 无法删除分支: 当前正在使用此分支
216
+ ❌ 远程分支删除失败: 权限不足
217
+ ❌ 分支不存在: feature/non-existent-branch
218
+ ```
219
+
220
+ ## ⚙️ 配置选项
221
+
222
+ ### 分支前缀配置
223
+
224
+ ```json
225
+ {
226
+ "featurePrefix": "feature",
227
+ "hotfixPrefix": "hotfix"
228
+ }
229
+ ```
230
+
231
+ **自定义前缀示例:**
232
+ ```json
233
+ {
234
+ "featurePrefix": "feat",
235
+ "hotfixPrefix": "fix"
236
+ }
237
+ ```
238
+
239
+ 生成的分支名:
240
+ ```
241
+ feat/20260111-PROJ-123-add-login
242
+ fix/20260111-BUG-456-fix-crash
243
+ ```
244
+
245
+ ### ID 配置
246
+
247
+ ```json
248
+ {
249
+ "requireId": true,
250
+ "featureIdLabel": "Story ID",
251
+ "hotfixIdLabel": "Issue ID"
252
+ }
253
+ ```
254
+
255
+ **强制要求 ID:**
256
+ ```json
257
+ {
258
+ "requireId": true
259
+ }
260
+ ```
261
+
262
+ 设置后,创建分支时必须填写 ID,不能跳过。
263
+
264
+ **自定义 ID 标签:**
265
+ ```json
266
+ {
267
+ "featureIdLabel": "Jira ID",
268
+ "hotfixIdLabel": "Bug ID"
269
+ }
270
+ ```
271
+
272
+ ### 基础分支配置
273
+
274
+ ```json
275
+ {
276
+ "baseBranch": "develop"
277
+ }
278
+ ```
279
+
280
+ 设置后,所有新分支都会基于 `develop` 创建,除非使用 `--base` 参数覆盖。
281
+
282
+ ### 自动推送配置
283
+
284
+ ```json
285
+ {
286
+ "autoPush": true
287
+ }
288
+ ```
289
+
290
+ **配置选项:**
291
+ - `true` - 创建分支后自动推送,不询问
292
+ - `false` - 创建分支后不推送,不询问
293
+ - 不设置 - 每次创建分支时询问(默认行为)
294
+
295
+ ## 🎯 使用场景
296
+
297
+ ### 场景一:日常功能开发
298
+
299
+ ```bash
300
+ # 1. 创建功能分支
301
+ gw f
302
+ # 输入: PROJ-123, add-user-profile
303
+
304
+ # 2. 开发代码...
305
+
306
+ # 3. 提交代码
307
+ gw c
308
+
309
+ # 4. 推送到远程(如果还没推送)
310
+ git push origin feature/20260111-PROJ-123-add-user-profile
311
+
312
+ # 5. 创建 Pull Request
313
+
314
+ # 6. 合并后删除分支
315
+ gw d
316
+ ```
317
+
318
+ ### 场景二:紧急修复
319
+
320
+ ```bash
321
+ # 1. 创建 hotfix 分支(基于 main)
322
+ gw h --base main
323
+ # 输入: BUG-456, fix-payment-error
324
+
325
+ # 2. 修复代码...
326
+
327
+ # 3. 提交修复
328
+ gw c
329
+
330
+ # 4. 合并到 main 和 develop
331
+
332
+ # 5. 删除 hotfix 分支
333
+ gw d
334
+ ```
335
+
336
+ ### 场景三:实验性功能
337
+
338
+ ```bash
339
+ # 1. 创建实验分支
340
+ gw f
341
+ # 输入: EXP-789, try-new-algorithm
342
+
343
+ # 2. 实验开发...
344
+
345
+ # 3. 如果实验失败,直接删除分支
346
+ gw d
347
+ # 选择实验分支删除
348
+ ```
349
+
350
+ ### 场景四:团队协作
351
+
352
+ ```bash
353
+ # 1. 基于最新的 develop 创建分支
354
+ git checkout develop
355
+ git pull origin develop
356
+ gw f --base develop
357
+
358
+ # 2. 开发完成后推送
359
+ git push origin feature/20260111-PROJ-123-add-feature
360
+
361
+ # 3. 创建 Pull Request 到 develop
362
+
363
+ # 4. 代码审查通过后,删除本地分支
364
+ gw d
365
+ ```
366
+
367
+ ## 🔧 高级技巧
368
+
369
+ ### 技巧一:快速切换到新分支
370
+
371
+ ```bash
372
+ # 创建分支后自动切换
373
+ gw f
374
+ # 分支创建成功后会自动切换到新分支
375
+ ```
376
+
377
+ ### 技巧二:基于特定提交创建分支
378
+
379
+ ```bash
380
+ # 先切换到目标提交
381
+ git checkout abc1234
382
+
383
+ # 然后创建分支
384
+ gw f
385
+ ```
386
+
387
+ ### 技巧三:批量清理已合并分支
388
+
389
+ ```bash
390
+ # 使用 Git Workflow 逐个删除
391
+ gw d
392
+
393
+ # 或使用 Git 命令批量删除已合并分支
394
+ git branch --merged | grep -v "\*\|main\|develop" | xargs -n 1 git branch -d
395
+ ```
396
+
397
+ ### 技巧四:恢复误删的分支
398
+
399
+ ```bash
400
+ # 查看最近的操作
401
+ git reflog
402
+
403
+ # 恢复分支
404
+ git checkout -b recovered-branch <commit-hash>
405
+ ```
406
+
407
+ ## 🚨 常见问题
408
+
409
+ ### 问题一:分支名包含特殊字符
410
+
411
+ **问题:**
412
+ ```bash
413
+ gw f
414
+ ? 请输入描述: fix bug #123
415
+ ❌ 分支名包含无效字符
416
+ ```
417
+
418
+ **解决方案:**
419
+ - 避免使用 `#`, `@`, `空格` 等特殊字符
420
+ - 使用 `-` 或 `_` 连接单词
421
+ - 推荐格式:`fix-bug-123`
422
+
423
+ ### 问题二:无法删除远程分支
424
+
425
+ **问题:**
426
+ ```bash
427
+ ❌ 远程分支删除失败: 权限不足
428
+ ```
429
+
430
+ **解决方案:**
431
+ 1. 检查是否有推送权限
432
+ 2. 确认远程分支是否存在
433
+ 3. 手动删除:`git push origin --delete branch-name`
434
+
435
+ ### 问题三:基础分支不存在
436
+
437
+ **问题:**
438
+ ```bash
439
+ ❌ 基础分支 'develop' 不存在
440
+ ```
441
+
442
+ **解决方案:**
443
+ 1. 检查分支名是否正确
444
+ 2. 拉取远程分支:`git fetch origin develop:develop`
445
+ 3. 或使用其他基础分支:`gw f --base main`
446
+
447
+ ### 问题四:分支已存在
448
+
449
+ **问题:**
450
+ ```bash
451
+ ❌ 分支 'feature/20260111-PROJ-123-add-login' 已存在
452
+ ```
453
+
454
+ **解决方案:**
455
+ 1. 使用不同的描述
456
+ 2. 切换到现有分支:`git checkout feature/20260111-PROJ-123-add-login`
457
+ 3. 或删除现有分支后重新创建
458
+
459
+ ## 📚 相关命令
460
+
461
+ - [**gw c**](/commands/commit) - 提交代码到分支
462
+ - [**gw s**](/commands/stash) - 管理代码暂存
463
+ - [**gw t**](/commands/tag) - 为分支创建版本标签
464
+ - [**gw r**](/commands/release) - 发布版本
465
+
466
+ ---
467
+
468
+ 分支管理是 Git 工作流的基础,通过 Git Workflow 的分支命令,你可以轻松创建规范的分支名称,高效管理分支生命周期。