@zjex/git-workflow 0.2.17 → 0.2.18

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.
package/README.md CHANGED
@@ -10,20 +10,20 @@
10
10
  </p>
11
11
 
12
12
  <p align="center">
13
- 🚀 极简的 Git 工作流 CLI 工具,让分支管理和版本发布变得轻松愉快
13
+ <strong>🚀 极简的 Git 工作流 CLI 工具,让分支管理和版本发布变得轻松愉快</strong>
14
14
  </p>
15
15
 
16
16
  <p align="center">
17
- <a href="#特性">特性</a> •
18
- <a href="#快速开始">快速开始</a> •
19
- <a href="#命令详解">命令详解</a> •
20
- <a href="#配置文件">配置文件</a> •
21
- <a href="#最佳实践">最佳实践</a>
17
+ <a href="#✨-特性">特性</a> •
18
+ <a href="#⚡️-快速开始">快速开始</a> •
19
+ <a href="#📚-命令详解">命令详解</a> •
20
+ <a href="#⚙️-配置文件">配置文件</a> •
21
+ <a href="#💡-最佳实践">最佳实践</a>
22
22
  </p>
23
23
 
24
24
  ---
25
25
 
26
- ## 为什么选择 @zjex/git-workflow?
26
+ ## 🎯 为什么选择 git-workflow?
27
27
 
28
28
  在日常开发中,你是否经常遇到这些问题:
29
29
 
@@ -32,23 +32,71 @@
32
32
  - 📝 提交信息格式不统一,难以生成 CHANGELOG?
33
33
  - 🔄 删除分支时需要分别处理本地和远程?
34
34
  - 📋 团队成员的分支命名风格五花八门?
35
+ - 💬 写 commit message 总是词穷,不知道怎么描述?
35
36
 
36
37
  **git-workflow** 就是为解决这些痛点而生的。它提供了一套简洁的命令,让你专注于编码,而不是 Git 操作。
37
38
 
38
- ## 特性
39
+ ## 特性
40
+
41
+ ### 核心功能
39
42
 
40
43
  - ⚡️ **极速上手** - 零配置开箱即用,交互式菜单引导操作
41
- - 🤖 **AI 智能提交** - 使用 AI 自动分析代码变更生成 commit message(支持 GitHub Models、Groq 等)
42
- - 🎯 **规范命名** - 自动生成带日期的规范分支名,告别命名混乱
43
- - 🏷️ **智能版本** - 自动识别当前版本,交互式选择下一版本(支持 semver + 预发布)
44
+ - 🤖 **AI 智能提交** - 使用 AI 自动分析代码变更生成 commit message(支持 GitHub Models、OpenAI 等)
45
+ - 🎯 **规范命名** - 自动生成带日期的规范分支名(`feature/20260109-PROJ-123-add-login`)
46
+ - 🏷️ **智能版本** - 自动识别当前版本,交互式选择下一版本(支持 semver + 预发布版本)
44
47
  - 📝 **规范提交** - 遵循 Conventional Commits + Gitmoji,提交信息更清晰
45
48
  - 🗑️ **批量清理** - 一键删除本地+远程分支,按最近使用排序
46
- - ⚙️ **灵活配置** - 支持项目级配置文件,不同项目不同规范
47
- - 🎨 **优雅交互** - 友好的命令行界面,支持键盘快捷操作
48
- - 📦 **轻量依赖** - 打包体积小,安装快速无负担
49
+ - 💾 **Stash 管理** - 可视化管理 stash,支持预览、应用、创建分支等操作
49
50
  - 🔔 **版本提醒** - 自动检测新版本,一键更新
50
51
 
51
- ## 快速开始
52
+ ### 分支管理
53
+
54
+ - ✅ 自动检测基础分支(main/master)
55
+ - ✅ 支持自定义基础分支(`--base develop`)
56
+ - ✅ 自动处理未提交更改(询问是否 stash)
57
+ - ✅ 创建后可选自动推送到远程
58
+ - ✅ 删除时自动检测并清理远程分支
59
+ - ✅ 按最近使用时间排序,方便选择
60
+
61
+ ### 🏷️ Tag 管理
62
+
63
+ - ✅ 自动检测现有 tag 前缀(v、release-、@scope/等)
64
+ - ✅ 支持多种 tag 前缀,灵活适配不同项目
65
+ - ✅ 智能版本递增(patch/minor/major)
66
+ - ✅ 支持预发布版本(alpha/beta/rc)
67
+ - ✅ 预发布版本可升级或转正式版本
68
+ - ✅ 自动推送到远程
69
+ - ✅ 支持删除和修改 tag
70
+
71
+ ### Commit 管理
72
+
73
+ - ✅ AI 自动生成 commit message(2-3 秒完成)
74
+ - ✅ 支持 4 种 AI 提供商(GitHub/OpenAI/Claude/Ollama)
75
+ - ✅ 手动模式支持 11 种提交类型
76
+ - ✅ 自动添加 Gitmoji 表情
77
+ - ✅ 支持 scope、详细描述、关联 Issue
78
+ - ✅ 支持标记破坏性变更(BREAKING CHANGE)
79
+ - ✅ 提交前预览,可取消
80
+ - ✅ 自动暂存或手动选择文件
81
+
82
+ ### 配置灵活
83
+
84
+ - ⚙️ 支持项目级配置文件(`.gwrc.json`)
85
+ - ⚙️ 不同项目可使用不同规范
86
+ - ⚙️ 支持自定义分支前缀、ID 标签等
87
+ - ⚙️ 支持自定义 commit emoji
88
+ - ⚙️ 支持配置 AI 提供商和模型
89
+
90
+ ### 用户体验
91
+
92
+ - 🎨 优雅的命令行界面
93
+ - 🎯 键盘快捷操作(方向键、空格、回车)
94
+ - 🔍 实时搜索和过滤
95
+ - 📋 详细的操作提示和错误信息
96
+ - 🚫 优雅处理 Ctrl+C 退出
97
+ - 📦 轻量依赖,安装快速
98
+
99
+ ## ⚡️ 快速开始
52
100
 
53
101
  ### 安装
54
102
 
@@ -63,80 +111,53 @@ pnpm add -g @zjex/git-workflow
63
111
  yarn global add @zjex/git-workflow
64
112
  ```
65
113
 
66
- ### 从旧版本升级
114
+ > **💡 安装后第一件事:** 运行 `gw init` 创建全局配置,启用 AI commit 等功能!
67
115
 
68
- 如果你之前安装过 `git-workflow`(无 scope),需要先卸载旧版本:
116
+ ### 三步开始使用
69
117
 
70
118
  ```bash
71
- # 卸载旧版本
72
- npm uninstall -g git-workflow
73
-
74
- # 安装新版本
75
- npm install -g @zjex/git-workflow
76
- ```
119
+ # 第 1 步:创建全局配置(只需一次)
120
+ gw init
121
+ # 选择 "全局配置(所有项目生效)"
122
+ # 配置 AI commit、分支规范等
77
123
 
78
- 或者使用一行命令:
124
+ # 第 2 步:在任意项目中使用
125
+ cd your-project
126
+ gw c # AI 自动生成 commit message
127
+ gw f # 创建规范的 feature 分支
128
+ gw t # 创建语义化版本 tag
79
129
 
80
- ```bash
81
- npm uninstall -g git-workflow && npm install -g @zjex/git-workflow
130
+ # 第 3 步:享受高效的 Git 工作流 🎉
82
131
  ```
83
132
 
84
133
  ### 初次使用
85
134
 
86
135
  ```bash
87
- # 1. 初始化配置(可选,使用默认配置可跳过)
136
+ # 1. 查看版本
137
+ gw --version
138
+
139
+ # 2. 创建全局配置(推荐,一次配置所有项目生效)
88
140
  gw init
141
+ # 选择 "全局配置(所有项目生效)"
142
+ # 配置 AI commit、分支规范等
89
143
 
90
- # 2. 运行交互式菜单
144
+ # 3. 运行交互式菜单
91
145
  gw
92
146
 
93
- # 3. 或直接使用命令
147
+ # 4. 或直接使用命令
94
148
  gw f # 创建 feature 分支
95
- gw c # 提交代码
149
+ gw c # 提交代码(可使用 AI 自动生成)
96
150
  gw t # 创建 tag
151
+ gw d # 删除分支
152
+ gw s # 管理 stash
97
153
  ```
98
154
 
99
- ### 30 秒上手
100
-
101
- ```bash
102
- # 交互式菜单(推荐新手)
103
- gw
104
- # 显示 ZJEX Logo 和操作菜单,选择你要执行的操作
105
-
106
- # 或直接使用命令
107
- # 创建 feature 分支
108
- gw f
109
- # ? 请输入 Story ID (可跳过): PROJ-123
110
- # ? 请输入描述: add-user-login
111
- # ✔ 分支创建成功: feature/20260107-PROJ-123-add-user-login
155
+ **💡 提示:** 创建全局配置后,所有项目都能使用 AI commit 等功能,无需重复配置!
112
156
 
113
- # 提交代码
114
- gw c
115
- # ? 选择提交类型: ✨ feat 新功能
116
- # ? 输入简短描述: add user login
117
- # ✔ 提交成功
118
-
119
- # 创建 tag
120
- gw t
121
- # ? 选择 tag 前缀: v (最新: v1.2.0)
122
- # ? 选择版本类型: patch → v1.2.1
123
- # ✔ Tag 创建成功: v1.2.1
124
- # ✔ Tag 已推送: v1.2.1
125
-
126
- # 删除分支
127
- gw d
128
- # ? 选择要删除的分支: feature/20260105-old-feature (本地+远程)
129
- # ✔ 本地分支已删除
130
- # ✔ 远程分支已删除
131
- ```
132
-
133
- ## 命令详解
134
-
135
- ### 交互式菜单
136
-
137
- 直接运行 `gw` 显示交互式菜单,适合新手快速上手:
157
+ ### 30 秒上手示例
138
158
 
139
159
  ```bash
160
+ # 📋 交互式菜单(推荐新手)
140
161
  gw
141
162
 
142
163
  ███████╗ ██╗███████╗██╗ ██╗
@@ -146,7 +167,7 @@ gw
146
167
  ███████╗╚█████╔╝███████╗██╔╝ ██╗
147
168
  ╚══════╝ ╚════╝ ╚══════╝╚═╝ ╚═╝
148
169
 
149
- git-workflow v0.0.1
170
+ git-workflow v0.2.16
150
171
 
151
172
  ? 选择操作:
152
173
  [1] ✨ 创建 feature 分支 gw f
@@ -154,15 +175,102 @@ gw
154
175
  [3] 🗑️ 删除分支 gw d
155
176
  [4] 📝 提交代码 gw c
156
177
  [5] 🏷️ 创建 tag gw t
157
- [6] 📋 列出 tags gw ts
158
- [7] 📦 发布版本 gw r
159
- [8] 💾 管理 stash gw s
160
- [9] ⚙️ 初始化配置 gw init
178
+ [6] 🗑️ 删除 tag gw td
179
+ [7] ✏️ 修改 tag gw tu
180
+ [8] 📋 列出 tags gw ts
181
+ [9] 📦 发布版本 gw r
182
+ [a] 💾 管理 stash gw s
183
+ [b] ⚙️ 初始化配置 gw init # 可选择全局或项目配置
161
184
  [0] ❓ 帮助
162
185
  [q] 退出
186
+
187
+ # ✨ 创建 feature 分支
188
+ gw f
189
+ ? 请输入 Story ID (可跳过): PROJ-123
190
+ ? 请输入描述: add-user-login
191
+ ✔ 分支创建成功: feature/20260109-PROJ-123-add-user-login
192
+ ? 是否推送到远程? 是
193
+ ✔ 已推送到远程
194
+
195
+ # 📝 提交代码(AI 模式)
196
+ gw c
197
+ 已暂存的文件:
198
+ src/auth.ts
199
+ src/login.ts
200
+ ────────────────────────────────────────
201
+ ? 选择 commit 方式:
202
+ ❯ 🤖 AI 自动生成 commit message
203
+ ✍️ 手动编写 commit message
204
+
205
+ ✔ AI 生成完成
206
+
207
+ AI 生成的 commit message:
208
+ ✨ feat(auth): 添加用户登录功能
209
+ ────────────────────────────────────────
210
+ ? 使用这个 commit message?
211
+ ❯ ✅ 使用
212
+ ❌ 不使用,切换到手动模式
213
+
214
+ ✔ 提交成功
215
+ commit: a1b2c3d
216
+
217
+ # 🏷️ 创建 tag
218
+ gw t
219
+ ? 选择 tag 前缀: v (最新: v1.2.0)
220
+ ? 选择版本类型:
221
+ ❯ patch → v1.2.1
222
+ minor → v1.3.0
223
+ major → v2.0.0
224
+ alpha → v1.2.1-alpha.1
225
+ beta → v1.2.1-beta.1
226
+ rc → v1.2.1-rc.1
227
+
228
+ ✔ Tag 创建成功: v1.2.1
229
+ ✔ Tag 已推送: v1.2.1
230
+
231
+ # 🗑️ 删除分支
232
+ gw d
233
+ ? 选择要删除的分支:
234
+ ❯ feature/20260105-old-feature (本地+远程) 3 days ago
235
+ feature/20260103-test (仅本地) 5 days ago
236
+
237
+ ✔ 本地分支已删除: feature/20260105-old-feature
238
+ ✔ 远程分支已删除: origin/feature/20260105-old-feature
239
+
240
+ # 💾 管理 stash
241
+ gw s
242
+ 共 2 个 stash:
243
+
244
+ ? 选择 stash:
245
+ ❯ [0] main fix login bug (3 文件) 2 hours ago
246
+ [1] develop add feature (5 文件) 1 day ago
247
+ + 创建新 stash
248
+ 取消
249
+
250
+ ? 操作:
251
+ ❯ 应用 (保留 stash)
252
+ 弹出 (应用并删除)
253
+ 创建分支
254
+ 查看差异
255
+ 删除
256
+ 返回列表
257
+
258
+ ✔ Stash 已应用
259
+ ```
260
+
261
+ ## 📚 命令详解
262
+
263
+ ### 📋 交互式菜单
264
+
265
+ 直接运行 `gw` 显示交互式菜单,适合新手快速上手:
266
+
267
+ ```bash
268
+ gw
163
269
  ```
164
270
 
165
- ### 分支命令
271
+ 显示 ZJEX Logo 和完整的操作菜单,使用方向键选择,回车确认。
272
+
273
+ ### 🌿 分支命令
166
274
 
167
275
  | 命令 | 别名 | 说明 |
168
276
  | ------------------------------ | ----------------- | ----------------- |
@@ -216,12 +324,14 @@ gw d feature/20260101-old-feature
216
324
 
217
325
  删除时会自动检测远程分支是否存在,并询问是否一并删除。
218
326
 
219
- ### Tag 命令
327
+ ### 🏷️ Tag 命令
220
328
 
221
329
  | 命令 | 别名 | 说明 |
222
330
  | ------------------ | ------- | ------------------------ |
223
331
  | `gw tags [prefix]` | `gw ts` | 列出 tag(可按前缀过滤) |
224
332
  | `gw tag [prefix]` | `gw t` | 交互式创建 tag |
333
+ | `gw tag:delete` | `gw td` | 交互式删除 tag |
334
+ | `gw tag:update` | `gw tu` | 交互式修改 tag 消息 |
225
335
 
226
336
  #### 列出 Tag
227
337
 
@@ -244,6 +354,19 @@ gw t
244
354
  gw t v
245
355
  ```
246
356
 
357
+ **自动检测前缀:**
358
+
359
+ 工具会自动检测仓库中已有的 tag 前缀,并智能推荐:
360
+
361
+ ```bash
362
+ gw t
363
+ # 检测到以下 tag 前缀:
364
+ # ? 选择 tag 前缀:
365
+ # ❯ v (最新: v1.2.0)
366
+ # release- (最新: release-1.0.0)
367
+ # + 使用新前缀
368
+ ```
369
+
247
370
  如果仓库没有任何 tag,会引导创建初始版本:
248
371
 
249
372
  ```bash
@@ -263,7 +386,46 @@ gw t
263
386
  | `v1.2.3` | patch → `v1.2.4`<br>minor → `v1.3.0`<br>major → `v2.0.0`<br>alpha → `v1.2.4-alpha.1`<br>beta → `v1.2.4-beta.1`<br>rc → `v1.2.4-rc.1` |
264
387
  | `v1.2.4-beta.1` | pre → `v1.2.4-beta.2`<br>release → `v1.2.4`<br>patch/minor/major... |
265
388
 
266
- ### 版本命令
389
+ #### 删除 Tag
390
+
391
+ ```bash
392
+ # 交互式选择要删除的 tag
393
+ gw td
394
+
395
+ # 示例流程
396
+ ? 选择要删除的 tag:
397
+ ❯ v1.2.0 (2 days ago)
398
+ v1.1.0 (1 week ago)
399
+ v1.0.0 (2 weeks ago)
400
+
401
+ ? 确认删除 tag v1.2.0?
402
+ ❯ 是,删除本地和远程
403
+ 仅删除本地
404
+ 取消
405
+
406
+ ✔ 本地 tag 已删除: v1.2.0
407
+ ✔ 远程 tag 已删除: origin/v1.2.0
408
+ ```
409
+
410
+ #### 修改 Tag
411
+
412
+ ```bash
413
+ # 交互式选择要修改的 tag
414
+ gw tu
415
+
416
+ # 示例流程
417
+ ? 选择要修改的 tag:
418
+ ❯ v1.2.0 Release v1.2.0 (2 days ago)
419
+ v1.1.0 Release v1.1.0 (1 week ago)
420
+
421
+ 当前消息: Release v1.2.0
422
+ ? 输入新的 tag 消息: Release v1.2.0 - Bug fixes
423
+
424
+ ✔ Tag 消息已更新: v1.2.0
425
+ ✔ 已推送到远程
426
+ ```
427
+
428
+ ### 📦 版本命令
267
429
 
268
430
  | 命令 | 别名 | 说明 |
269
431
  | ------------ | ------ | ----------------------------------- |
@@ -282,25 +444,40 @@ gw r
282
444
  # ✓ 版本号已更新: 0.0.1 → 0.0.2
283
445
  ```
284
446
 
285
- ### 配置命令
447
+ ### ⚙️ 配置命令
286
448
 
287
- | 命令 | 说明 |
288
- | --------- | ------------------------------- |
289
- | `gw init` | 交互式初始化配置文件 .gwrc.json |
449
+ | 命令 | 说明 |
450
+ | --------- | ------------------------------------------------ |
451
+ | `gw init` | 交互式初始化配置文件(可选择全局配置或项目配置) |
290
452
 
291
453
  ```bash
454
+ # 创建全局配置(推荐,一次配置所有项目生效)
292
455
  gw init
293
- # 配置 git-workflow,直接回车使用默认值
294
- # ? 默认基础分支 (留空自动检测 main/master):
295
- # ? Feature 分支前缀: feature
296
- # ? Hotfix 分支前缀: hotfix
297
- # ? 是否要求必填 ID? No
298
- # ? 默认 Tag 前缀 (留空则每次选择): v
299
- # ? 创建分支后是否自动推送? 每次询问
300
- # ✓ 配置已保存到 .gwrc.json
456
+ # 选择 "全局配置(所有项目生效)"
457
+ # 配置保存到 ~/.gwrc.json
458
+
459
+ # 创建项目配置(仅当前项目生效)
460
+ gw init
461
+ # 选择 "项目配置(仅当前项目)"
462
+ # 配置保存到 .gwrc.json
301
463
  ```
302
464
 
303
- ### Stash 命令
465
+ **配置流程:**
466
+
467
+ ```bash
468
+ gw init
469
+
470
+ ⚙️ 初始化 git-workflow 配置
471
+
472
+ ? 选择配置范围:
473
+ ❯ 全局配置(所有项目生效) # 推荐!配置一次,所有项目都能用
474
+ 项目配置(仅当前项目) # 为特定项目自定义配置
475
+
476
+ # 然后按提示配置各项参数
477
+ # 包括:分支前缀、ID 要求、自动推送、AI commit 等
478
+ ```
479
+
480
+ ### 💾 Stash 命令
304
481
 
305
482
  | 命令 | 别名 | 说明 |
306
483
  | ---------- | --------------- | ---------------- |
@@ -344,7 +521,7 @@ gw st
344
521
 
345
522
  创建 stash 时,如果检测到未跟踪的新文件,会询问是否一并 stash。
346
523
 
347
- ### Commit 命令
524
+ ### 📝 Commit 命令
348
525
 
349
526
  | 命令 | 别名 | 说明 |
350
527
  | ----------- | --------------- | ------------------------------------------- |
@@ -386,11 +563,19 @@ gw c
386
563
 
387
564
  **支持的 AI 提供商:**
388
565
 
389
- - **GitHub Models**(免费,推荐)- 使用 GitHub 账号,每天 150 次
390
- - **Groq**(免费)- 需要注册,每天 14,400
391
- - **OpenAI**(付费)- 需要 API key
392
- - **Claude**(付费)- 需要 API key
393
- - **Ollama**(本地)- 需要安装 Ollama
566
+ - **GitHub Models**(免费,推荐)
567
+ - 使用 GitHub 账号,每天 150 次免费
568
+ - 需要配置 GitHub Token(工具会引导你获取)
569
+ - 获取地址:https://github.com/settings/tokens/new
570
+ - **OpenAI**(付费)
571
+ - 需要配置 OpenAI API Key
572
+ - 获取地址:https://platform.openai.com/api-keys
573
+ - **Claude**(付费)
574
+ - 需要配置 Claude API Key
575
+ - 获取地址:https://console.anthropic.com/
576
+ - **Ollama**(本地)
577
+ - 需要安装 Ollama,无需 API key
578
+ - 安装地址:https://ollama.com/
394
579
 
395
580
  #### ✍️ 手动编写
396
581
 
@@ -469,13 +654,55 @@ gw c
469
654
  # ✔ 已暂存 2 个文件
470
655
  ```
471
656
 
472
- ## 配置文件
657
+ ## ⚙️ 配置文件
658
+
659
+ git-workflow 支持两种配置方式:
660
+
661
+ ### 配置优先级
662
+
663
+ 1. **项目配置**(`.gwrc.json` / `.gwrc` / `gw.config.json`)- 仅当前项目生效
664
+ 2. **全局配置**(`~/.gwrc.json`)- 所有项目生效
665
+ 3. **默认配置** - 内置默认值
666
+
667
+ **配置合并规则:** 项目配置 > 全局配置 > 默认配置
668
+
669
+ ### 快速开始
670
+
671
+ ```bash
672
+ # 创建全局配置(推荐)
673
+ gw init
674
+ # 选择 "全局配置(所有项目生效)"
675
+ # 配置一次,所有项目都能使用 AI commit 等功能
676
+
677
+ # 为特定项目创建自定义配置
678
+ cd your-project
679
+ gw init
680
+ # 选择 "项目配置(仅当前项目)"
681
+ # 项目配置会覆盖全局配置
682
+ ```
683
+
684
+ ### 配置文件位置
685
+
686
+ | 类型 | 位置 | 说明 |
687
+ | -------- | ----------------------------------------- | ------------------------------------ |
688
+ | 全局配置 | `~/.gwrc.json` | 对所有项目生效,无需在每个项目中配置 |
689
+ | 项目配置 | `.gwrc.json` / `.gwrc` / `gw.config.json` | 仅当前项目生效,可覆盖全局配置 |
690
+
691
+ **查找顺序:** 当前目录 → Git 仓库根目录 → 用户主目录
473
692
 
474
- 在项目根目录创建配置文件,可自定义工具行为。不同项目可以有不同配置,满足多样化需求。
693
+ ### 使用场景
475
694
 
476
- **支持的文件名:** `.gwrc.json` / `.gwrc` / `gw.config.json`
695
+ **全局配置适合:**
477
696
 
478
- **查找顺序:** 当前目录 Git 仓库根目录
697
+ - AI commit 配置(API key、提供商等)
698
+ - 个人习惯配置(emoji、自动暂存等)
699
+ - 通用的分支命名规范
700
+
701
+ **项目配置适合:**
702
+
703
+ - 团队统一的分支规范
704
+ - 项目特定的 ID 要求
705
+ - 特殊的分支前缀
479
706
 
480
707
  ### 完整配置示例
481
708
 
@@ -504,54 +731,90 @@ gw c
504
731
 
505
732
  ### 配置项说明
506
733
 
507
- | 配置项 | 类型 | 默认值 | 说明 |
508
- | ------------------ | --------- | ------------ | ------------------------------------------ |
509
- | `baseBranch` | `string` | 自动检测 | 默认基础分支,不设置则自动检测 main/master |
510
- | `featurePrefix` | `string` | `"feature"` | feature 分支前缀 |
511
- | `hotfixPrefix` | `string` | `"hotfix"` | hotfix 分支前缀 |
512
- | `requireId` | `boolean` | `false` | 是否要求必填 ID |
513
- | `featureIdLabel` | `string` | `"Story ID"` | feature 分支 ID 提示文字 |
514
- | `hotfixIdLabel` | `string` | `"Issue ID"` | hotfix 分支 ID 提示文字 |
515
- | `defaultTagPrefix` | `string` | - | 默认 tag 前缀,设置后跳过选择步骤 |
516
- | `autoPush` | `boolean` | - | 创建分支后是否自动推送,不设置则询问 |
517
- | `autoStage` | `boolean` | `true` | commit 时是否自动暂存所有更改 |
518
- | `useEmoji` | `boolean` | `true` | commit 时是否使用 emoji |
519
- | `commitEmojis` | `object` | - | 自定义各类型 commit 的 emoji |
520
- | `aiCommit` | `object` | - | AI commit 配置 |
734
+ | 配置项 | 类型 | 默认值 | 说明 |
735
+ | ------------------ | --------- | ------------ | ------------------------------------------------------------------------------- |
736
+ | `baseBranch` | `string` | 自动检测 | 默认基础分支,不设置则自动检测 main/master |
737
+ | `featurePrefix` | `string` | `"feature"` | feature 分支前缀 |
738
+ | `hotfixPrefix` | `string` | `"hotfix"` | hotfix 分支前缀 |
739
+ | `requireId` | `boolean` | `false` | 是否强制要求填写 ID(Story ID/Issue ID)。开启后创建分支时必须填写 ID,不能跳过 |
740
+ | `featureIdLabel` | `string` | `"Story ID"` | feature 分支 ID 提示文字 |
741
+ | `hotfixIdLabel` | `string` | `"Issue ID"` | hotfix 分支 ID 提示文字 |
742
+ | `defaultTagPrefix` | `string` | - | 默认 tag 前缀,设置后跳过选择步骤 |
743
+ | `autoPush` | `boolean` | - | 创建分支后是否自动推送到远程。`true` 自动推送,`false` 不推送,不设置则每次询问 |
744
+ | `autoStage` | `boolean` | `true` | commit 时是否自动暂存所有更改 |
745
+ | `useEmoji` | `boolean` | `true` | commit 时是否使用 emoji |
746
+ | `commitEmojis` | `object` | - | 自定义各类型 commit 的 emoji |
747
+ | `aiCommit` | `object` | - | AI commit 配置 |
521
748
 
522
749
  #### AI Commit 配置项
523
750
 
524
- | 配置项 | 类型 | 默认值 | 说明 |
525
- | -------------------- | --------- | ---------- | ------------------------------------------------------------- |
526
- | `aiCommit.enabled` | `boolean` | `true` | 是否启用 AI commit 功能 |
527
- | `aiCommit.provider` | `string` | `"github"` | AI 提供商:`github` / `groq` / `openai` / `claude` / `ollama` |
528
- | `aiCommit.apiKey` | `string` | - | API key,留空使用内置 key |
529
- | `aiCommit.model` | `string` | 根据提供商 | 模型名称 |
530
- | `aiCommit.language` | `string` | `"zh-CN"` | 生成语言:`zh-CN` / `en-US` |
531
- | `aiCommit.maxTokens` | `number` | `200` | 最大 token 数 |
751
+ | 配置项 | 类型 | 默认值 | 说明 |
752
+ | -------------------- | --------- | ---------- | ---------------------------------------------------- |
753
+ | `aiCommit.enabled` | `boolean` | `true` | 是否启用 AI commit 功能 |
754
+ | `aiCommit.provider` | `string` | `"github"` | AI 提供商:`github` / `openai` / `claude` / `ollama` |
755
+ | `aiCommit.apiKey` | `string` | - | API key,留空使用内置 key |
756
+ | `aiCommit.model` | `string` | 根据提供商 | 模型名称 |
757
+ | `aiCommit.language` | `string` | `"zh-CN"` | 生成语言:`zh-CN` / `en-US` |
758
+ | `aiCommit.maxTokens` | `number` | `200` | 最大 token 数 |
532
759
 
533
760
  ### 常见配置场景
534
761
 
535
762
  <details>
536
- <summary><b>场景一:启用 AI Commit(推荐)</b></summary>
763
+ <summary><b>场景一:全局启用 AI Commit(强烈推荐)</b></summary>
764
+
765
+ **一次配置,所有项目生效!**
766
+
767
+ ```bash
768
+ # 1. 创建全局配置
769
+ gw init
770
+ # 选择 "全局配置(所有项目生效)"
771
+
772
+ # 2. 配置 AI commit
773
+ # 选择 AI 提供商: GitHub Models(免费,推荐)
774
+ #
775
+ # 💡 如何获取 GitHub Token:
776
+ # 1. 访问: https://github.com/settings/tokens/new
777
+ # 2. 勾选 'repo' 权限
778
+ # 3. 生成并复制 token
779
+ #
780
+ # 输入你的 GitHub Token: ghp_xxxxxxxxxxxx
781
+ # 选择语言: 中文
782
+ ```
783
+
784
+ 生成的全局配置文件 `~/.gwrc.json`:
537
785
 
538
786
  ```json
539
787
  {
788
+ "featurePrefix": "feature",
789
+ "hotfixPrefix": "hotfix",
790
+ "requireId": false,
791
+ "featureIdLabel": "Story ID",
792
+ "hotfixIdLabel": "Issue ID",
793
+ "autoStage": true,
794
+ "useEmoji": true,
540
795
  "aiCommit": {
541
796
  "enabled": true,
542
797
  "provider": "github",
543
- "language": "zh-CN"
798
+ "language": "zh-CN",
799
+ "model": "gpt-4o-mini"
544
800
  }
545
801
  }
546
802
  ```
547
803
 
548
- **说明:**
804
+ **效果:**
805
+
806
+ - ✅ 所有项目都能使用 AI commit
807
+ - ✅ 无需在每个项目中重复配置
808
+ - ✅ 新项目自动继承配置
809
+ - ✅ 独享 GitHub Models 限额(每天 150 次)
810
+
811
+ **GitHub Token 权限说明:**
549
812
 
550
- - 使用 GitHub Models(免费)
551
- - 生成中文 commit message
552
- - 使用内置 API key(开箱即用)
813
+ - 只需要勾选 `repo` 权限
814
+ - Token 仅用于调用 GitHub Models API
815
+ - 不会访问你的代码仓库
553
816
 
554
- 如果想使用自己的 key:
817
+ **手动编辑配置文件:**
555
818
 
556
819
  ```json
557
820
  {
@@ -569,7 +832,49 @@ gw c
569
832
  </details>
570
833
 
571
834
  <details>
572
- <summary><b>场景二:强制要求关联 Issue</b></summary>
835
+ <summary><b>场景二:团队项目配置(覆盖全局配置)</b></summary>
836
+
837
+ **全局配置 + 项目配置 = 灵活组合**
838
+
839
+ 假设你已经有全局配置(启用了 AI commit),现在要为团队项目添加特定规范:
840
+
841
+ ```bash
842
+ cd team-project
843
+ gw init
844
+ # 选择 "项目配置(仅当前项目)"
845
+ ```
846
+
847
+ 项目配置 `.gwrc.json`:
848
+
849
+ ```json
850
+ {
851
+ "requireId": true,
852
+ "featureIdLabel": "Jira ID",
853
+ "hotfixIdLabel": "Bug ID",
854
+ "autoPush": true,
855
+ "baseBranch": "develop"
856
+ }
857
+ ```
858
+
859
+ **最终生效的配置:**
860
+
861
+ - ✅ AI commit 配置来自全局配置
862
+ - ✅ 分支规范来自项目配置
863
+ - ✅ 项目配置覆盖全局配置的同名字段
864
+
865
+ **提交到仓库:**
866
+
867
+ ```bash
868
+ git add .gwrc.json
869
+ git commit -m "chore: add git-workflow config"
870
+ ```
871
+
872
+ 团队成员拉取代码后,自动使用统一的分支规范,同时保留各自的 AI commit 配置。
873
+
874
+ </details>
875
+
876
+ <details>
877
+ <summary><b>场景三:强制关联 Issue/Story(适合团队协作)</b></summary>
573
878
 
574
879
  ```json
575
880
  {
@@ -579,22 +884,96 @@ gw c
579
884
  }
580
885
  ```
581
886
 
887
+ **说明:**
888
+
889
+ - `requireId: true` - 创建分支时必须填写 ID,不能跳过
890
+ - 确保每个分支都能追溯到具体的需求或 Bug
891
+ - 适合使用 Jira、禅道等项目管理工具的团队
892
+
893
+ **效果对比:**
894
+
895
+ ```bash
896
+ # requireId: false(默认)
897
+ gw f
898
+ ? 请输入 Story ID (可跳过): # 可以直接回车跳过
899
+ ? 请输入描述: add-login
900
+ ✔ 分支创建成功: feature/20260109-add-login
901
+
902
+ # requireId: true
903
+ gw f
904
+ ? 请输入 Jira ID: # 必须填写,不能跳过
905
+ ? 请输入描述: add-login
906
+ ✔ 分支创建成功: feature/20260109-PROJ-123-add-login
907
+ ```
908
+
582
909
  </details>
583
910
 
584
911
  <details>
585
- <summary><b>场景二:基于 develop 分支开发</b></summary>
912
+ <summary><b>场景四:自动推送到远程(提高效率)</b></summary>
586
913
 
587
914
  ```json
588
915
  {
589
- "baseBranch": "develop",
590
916
  "autoPush": true
591
917
  }
592
918
  ```
593
919
 
920
+ **说明:**
921
+
922
+ - `autoPush: true` - 创建分支后自动推送到远程,不再询问
923
+ - `autoPush: false` - 创建分支后不推送,不再询问
924
+ - 不设置 - 每次创建分支时询问是否推送(默认行为)
925
+
926
+ **效果对比:**
927
+
928
+ ```bash
929
+ # autoPush 未设置(默认)
930
+ gw f
931
+ ✔ 分支创建成功: feature/20260109-add-login
932
+ ? 是否推送到远程? # 每次都会询问
933
+
934
+
935
+
936
+ # autoPush: true
937
+ gw f
938
+ ✔ 分支创建成功: feature/20260109-add-login
939
+ (自动推送已启用) # 直接推送,不询问
940
+ ✔ 已推送到远程: origin/feature/20260109-add-login
941
+
942
+ # autoPush: false
943
+ gw f
944
+ ✔ 分支创建成功: feature/20260109-add-login
945
+ # 不推送,不询问
946
+ ```
947
+
948
+ **适用场景:**
949
+
950
+ - `true` - 团队协作,需要及时同步分支
951
+ - `false` - 个人开发,暂时不想推送
952
+ - 不设置 - 灵活决定,根据情况选择
953
+
954
+ </details>
955
+
956
+ <details>
957
+ <summary><b>场景五:基于 develop 分支开发</b></summary>
958
+
959
+ ```json
960
+ {
961
+ "baseBranch": "develop",
962
+ "autoPush": true,
963
+ "requireId": true
964
+ }
965
+ ```
966
+
967
+ **说明:**
968
+
969
+ - 所有新分支都基于 `develop` 创建
970
+ - 自动推送到远程
971
+ - 强制要求填写 ID
972
+
594
973
  </details>
595
974
 
596
975
  <details>
597
- <summary><b>场景三:自定义分支前缀</b></summary>
976
+ <summary><b>场景六:自定义分支前缀</b></summary>
598
977
 
599
978
  ```json
600
979
  {
@@ -603,10 +982,15 @@ gw c
603
982
  }
604
983
  ```
605
984
 
985
+ **说明:**
986
+
987
+ - 分支名变为 `feat/20260109-xxx` 和 `fix/20260109-xxx`
988
+ - 适合有特定命名规范的团队
989
+
606
990
  </details>
607
991
 
608
992
  <details>
609
- <summary><b>场景四:禁用 Emoji(适合严格的 CI/CD 环境)</b></summary>
993
+ <summary><b>场景七:禁用 Emoji(适合严格的 CI/CD 环境)</b></summary>
610
994
 
611
995
  ```json
612
996
  {
@@ -615,12 +999,15 @@ gw c
615
999
  }
616
1000
  ```
617
1001
 
618
- 提交信息格式变为:`feat(scope): description` 而不是 `✨ feat(scope): description`
1002
+ **说明:**
1003
+
1004
+ - 提交信息格式变为:`feat(scope): description` 而不是 `✨ feat(scope): description`
1005
+ - 手动选择要暂存的文件,而不是自动暂存所有更改
619
1006
 
620
1007
  </details>
621
1008
 
622
1009
  <details>
623
- <summary><b>场景五:自定义 Commit Emoji</b></summary>
1010
+ <summary><b>场景八:自定义 Commit Emoji</b></summary>
624
1011
 
625
1012
  ```json
626
1013
  {
@@ -640,39 +1027,65 @@ gw c
640
1027
  }
641
1028
  ```
642
1029
 
643
- 可以只覆盖部分类型,未配置的使用默认 emoji。
1030
+ **说明:**
1031
+
1032
+ - 可以只覆盖部分类型,未配置的使用默认 emoji
644
1033
 
645
1034
  </details>
646
1035
 
647
- ## 最佳实践
1036
+ ## 💡 最佳实践
648
1037
 
649
1038
  ### 团队协作
650
1039
 
651
1040
  1. **统一配置** - 将 `.gwrc.json` 提交到仓库,确保团队使用相同的分支规范
652
1041
  2. **强制 ID** - 开启 `requireId`,确保每个分支都能追溯到需求/Issue
653
1042
  3. **自动推送** - 开启 `autoPush`,减少遗忘推送的情况
1043
+ 4. **启用 AI Commit** - 配置 AI 提供商,让团队提交信息更规范统一
654
1044
 
655
1045
  ### 版本发布
656
1046
 
657
1047
  1. **预发布测试** - 使用 alpha/beta/rc 版本进行测试
658
- 2. **语义化版本** - 遵循 semver 规范,bug 修复用 patch,新功能用 minor,破坏性变更用 major
1048
+ 2. **语义化版本** - 遵循 semver 规范:
1049
+ - Bug 修复用 `patch`(1.0.0 → 1.0.1)
1050
+ - 新功能用 `minor`(1.0.0 → 1.1.0)
1051
+ - 破坏性变更用 `major`(1.0.0 → 2.0.0)
1052
+ 3. **Tag 与版本同步** - 发布版本后立即创建对应的 tag
659
1053
 
660
1054
  ### 分支清理
661
1055
 
662
- 定期使用 `gw d` 清理已合并的分支,保持仓库整洁。
1056
+ 1. **定期清理** - 使用 `gw d` 定期清理已合并的分支
1057
+ 2. **远程同步** - 删除分支时同时清理远程分支
1058
+ 3. **保持整洁** - 避免积累过多无用分支
663
1059
 
664
- ## 与其他工具对比
1060
+ ### Stash 管理
665
1061
 
666
- | 特性 | git-workflow | git-flow | 手动操作 |
667
- | ------------ | ------------- | ----------- | --------- |
668
- | 学习成本 | 极低 | ⭐⭐⭐ 较高 | ⭐⭐ 中等 |
669
- | 分支命名规范 | ✅ 自动生成 | ❌ 需手动 | ❌ 需手动 |
670
- | 版本号管理 | ✅ 智能递增 | ❌ 需手动 | ❌ 需手动 |
671
- | 交互式操作 | ✅ 支持 | ❌ 不支持 | ❌ 不支持 |
672
- | 配置灵活性 | ✅ 项目级配置 | ⚠️ 有限 | - |
673
- | 远程分支同步 | ✅ 自动处理 | ⚠️ 部分 | ❌ 需手动 |
1062
+ 1. **及时命名** - 创建 stash 时添加清晰的描述
1063
+ 2. **定期清理** - 不再需要的 stash 及时删除
1064
+ 3. **创建分支** - 对于长期保留的改动,考虑创建分支而不是 stash
674
1065
 
675
- ## 开发
1066
+ ### Commit 规范
1067
+
1068
+ 1. **优先使用 AI** - AI 生成的 commit message 更规范、更准确
1069
+ 2. **添加 scope** - 明确改动的模块或功能范围
1070
+ 3. **关联 Issue** - 提交时关联相关的 Issue 编号
1071
+ 4. **破坏性变更** - 重要的 API 变更要标记 BREAKING CHANGE
1072
+
1073
+ ## 🆚 与其他工具对比
1074
+
1075
+ | 特性 | git-workflow | git-flow | 手动操作 |
1076
+ | ---------------- | ------------- | ----------- | --------- |
1077
+ | 学习成本 | ⭐ 极低 | ⭐⭐⭐ 较高 | ⭐⭐ 中等 |
1078
+ | 分支命名规范 | ✅ 自动生成 | ❌ 需手动 | ❌ 需手动 |
1079
+ | 版本号管理 | ✅ 智能递增 | ❌ 需手动 | ❌ 需手动 |
1080
+ | Tag 管理 | ✅ 完整支持 | ⚠️ 基础 | ❌ 需手动 |
1081
+ | AI Commit | ✅ 支持 | ❌ 不支持 | ❌ 不支持 |
1082
+ | Stash 可视化管理 | ✅ 支持 | ❌ 不支持 | ❌ 不支持 |
1083
+ | 交互式操作 | ✅ 支持 | ❌ 不支持 | ❌ 不支持 |
1084
+ | 配置灵活性 | ✅ 项目级配置 | ⚠️ 有限 | - |
1085
+ | 远程分支同步 | ✅ 自动处理 | ⚠️ 部分 | ❌ 需手动 |
1086
+ | 自动更新提醒 | ✅ 支持 | ❌ 不支持 | - |
1087
+
1088
+ ## 🛠️ 开发
676
1089
 
677
1090
  ```bash
678
1091
  # 克隆仓库
@@ -690,13 +1103,14 @@ npm run build
690
1103
 
691
1104
  # 本地测试
692
1105
  npm link
1106
+ gw --version
693
1107
  ```
694
1108
 
695
- ## 发布
1109
+ ## 📦 发布
696
1110
 
697
1111
  ```bash
698
- # 自动化发布(推荐)
699
- npm run release
1112
+ # 使用内置发布脚本(推荐)
1113
+ npm run publish:npm
700
1114
 
701
1115
  # 手动发布
702
1116
  npm run build
@@ -706,18 +1120,33 @@ git push origin main --tags
706
1120
  npm publish
707
1121
  ```
708
1122
 
709
- 详见 [发布脚本文档](./scripts/README.md)
710
-
711
- ## 贡献
1123
+ ## 🤝 贡献
712
1124
 
713
1125
  欢迎提交 Issue 和 Pull Request!
714
1126
 
715
- ## License
1127
+ 在提交 PR 之前,请确保:
1128
+
1129
+ 1. 代码通过 TypeScript 类型检查
1130
+ 2. 遵循现有的代码风格
1131
+ 3. 添加必要的注释和文档
1132
+ 4. 测试你的更改
716
1133
 
717
- [MIT](./LICENSE) License © 2026
1134
+ ## 📄 License
1135
+
1136
+ [MIT](./LICENSE) License © 2026 [zjex](https://github.com/iamzjt-front-end)
1137
+
1138
+ ## 🙏 致谢
1139
+
1140
+ 感谢所有贡献者和使用者的支持!
718
1141
 
719
1142
  ---
720
1143
 
721
1144
  <p align="center">
722
- 如果这个工具对你有帮助,请给个 ⭐️ 支持一下!
1145
+ <strong>如果这个工具对你有帮助,请给个 ⭐️ 支持一下!</strong>
1146
+ </p>
1147
+
1148
+ <p align="center">
1149
+ <a href="https://github.com/iamzjt-front-end/git-workflow">GitHub</a> •
1150
+ <a href="https://www.npmjs.com/package/@zjex/git-workflow">npm</a> •
1151
+ <a href="https://github.com/iamzjt-front-end/git-workflow/issues">Issues</a>
723
1152
  </p>