git-alias 1.2.22

A fast git alias tool with dual-style command support
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
# Git-Alias

一个快速的 Git 别名工具,支持两种调用方式。

## 特性

- **双模式调用**: 支持直接调用 (`gs`) 和 g 前缀调用 (`g s`)
- **142+ 内置别名**: 覆盖所有常用 git 操作
- **自定义别名**: 通过 `~/.git-alias.toml` 添加自定义别名
- **Shell 补全**: 支持 bash、zsh、fish 补全脚本
- **高性能**: Rust 编译,启动时间 < 1ms

## 安装

```bash
cargo install git-alias
```

## 配置

### 添加到 PATH

将以下内容添加到 `.bashrc` 或 `.zshrc`:

```bash
export PATH="$HOME/.local/bin:$PATH"
```

## 使用方法

### 基本命令

```bash
# 直接调用 (必须以 g 开头)
gs          # git status
gba         # git branch --all
gcm         # git commit (interactive)
gcmm "msg"  # git commit -m "msg"

# 通过 g 前缀调用
g s         # git status
g ls        # git log --no-merges
g ba        # git branch --all
g cm "msg"  # git commit -m "msg"

# 注意: g gps 这种用法不支持,gps 以 g 开头只能用直接调用
```

### 子命令

```bash
g list              # 列出所有别名
g list push         # 过滤显示 push 相关别名
g completions bash  # 生成 bash 补全脚本
g init              # 创建配置文件
g install           # 安装所有别名命令
g --help            # 显示帮助
```

### AI 提交摘要

`g msg` 命令调用 AI 工具自动生成版本变更摘要:

```bash
# 分析两个分支之间的变更
g msg release/v0.3.4..release/v0.3.5

# 分析两个 commit 之间的变更
g msg db8201ed..8a61f32a

# 分析最近 N 个提交
g msg HEAD~10..HEAD
```

**注意**:
- `A..B` 范围为空时,会自动使用 `merge-base` 找到分叉点,显示分叉后 B 的新提交
- 如果分支不存在,提示使用 `origin/feature/xxx` 远程分支名,或用 `git branch -a` 查看所有分支

**输出示例:**

```markdown
## 版本变更摘要 (release/v0.3.4 → release/v0.3.5)

### 🐛 Bug 修复
- **打包问题**:修复 PR #66 引入的无法启动问题

### ✨ 新功能
- **分析**:客户端可开启显示,实时展示分析结果
- **广场**:新增广场界面

### 🔧 优化与重构
- **Kernel 更新**:合并最新 kernel

### 📝 其他
- 版本更新至 **0.3.5**
```

### 配置管理

配置文件位于 `~/.config/git-alias.toml`(旧配置 `~/.git-alias.toml` 会自动迁移)。

```bash
# 查看所有配置
g config

# 获取配置值
g config get msg.provider

# 设置配置值
g config set msg.provider=openai
g config set msg.openai.api_key=sk-...
g config set msg.openai.model=gpt-4o

# 重新生成默认配置文件(已存在时会提示确认覆盖)
g config new
```

**AI Provider 配置**:

| Provider | 说明 |
|----------|------|
| `tool` | 使用 claude/opencode 等本地工具(默认) |
| `openai` | 使用 OpenAI API |
| `anthropic` | 使用 Anthropic API |

**示例配置**:

```toml
[msg]
provider = "openai"

[msg.openai]
model = "gpt-4o-mini"
api_key = "sk-..."
base_url = "https://api.openai.com/v1"

[msg.anthropic]
model = "claude-3-5-sonnet-20241022"
api_key = "sk-ant-..."
base_url = "https://api.anthropic.com"
```

## 别名列表

运行 `g list` 查看所有别名。

> **调用规则**:
> - 直接调用(如 `gs`, `gps`, `gba`):必须以 `g` 开头
> - `g` 前缀调用(如 `g s`, `g ps`, `g ba`):别名不能以 `g` 开头
> - `g` 开头的别名不支持 `g` 前缀调用(如 `g gps` 报错)

### Add (添加)
| 别名 | 命令 |
|------|------|
| `g a` | git add |
| `ga` | git add |
| `g aa` | git add . |
| `gaa` | git add . |

### Status (状态)
| 别名 | 命令 |
|------|------|
| `g s` | git status |
| `gs` | git status |
| `g ss` | git status -s |
| `gss` | git status -s |
| `g sb` | git status -s -b |
| `gsb` | git status -s -b |

### Commit (提交)
| 别名 | 命令 |
|------|------|
| `g cm` | git commit -m |
| `gcm` | git commit (interactive) |
| `g cmm` | git commit -m |
| `gcmm` | git commit -m |
| `g ca` | git commit --amend |
| `gca` | git commit --amend |
| `g cn` | git commit --no-edit --amend |
| `gcn` | git commit --no-edit --amend |
| `g cmai` | git commit (AI auto message) |
| `gcmai` | git commit (AI auto message) |

### Push (推送)
| 别名 | 命令 |
|------|------|
| `g ps` | git push |
| `gps` | git push |
| `g psf` | git push --force-with-lease |
| `gpsf` | git push --force-with-lease |
| `g psu` | git push -u origin HEAD |
| `gpsu` | git push -u origin HEAD |

### Pull (拉取)
| 别名 | 命令 |
|------|------|
| `g p` | git pull |
| `gp` | git pull |
| `g pl` | git pull |
| `gpl` | git pull |
| `g pla` | git pull --all -t |
| `gpla` | git pull --all -t |

### Branch (分支)
| 别名 | 命令 |
|------|------|
| `g b` | git branch |
| `gb` | git branch |
| `g ba` | git branch --all |
| `gba` | git branch --all |
| `g bra` | git branch -avv |
| `gbra` | git branch -avv |
| `g bd` | git branch --delete |
| `gbD` | git branch --delete --force |

### Checkout (检出)
| 别名 | 命令 |
|------|------|
| `g ck` | git checkout |
| `gck` | git checkout |
| `g ckb` | git checkout -b |
| `gckb` | git checkout -b |

### Switch (切换)
| 别名 | 命令 |
|------|------|
| `g sw` | git switch |
| `gsw` | git switch |
| `g swc` | git switch --create |
| `gswc` | git switch --create |
| `g swd` | git switch --detach |
| `gswd` | git switch --detach |
| `g swf` | git switch --force |
| `gswf` | git switch --force |

### Log (日志)
| 别名 | 命令 |
|------|------|
| `g l` | git log (自定义格式) |
| `gl` | git log (自定义格式) |
| `g lg` | git log -S <string> |
| `glg` | git log -S <string> |
| `g lgg` | git log -G <pattern> |
| `glgg` | git log -G <pattern> |
| `g ls` | git log --no-merges |
| `gls` | git log --no-merges |
| `g lss` | git log --no-merges --stat=200 |
| `glss` | git log --no-merges --stat=200 |
| `g lp` | git log --oneline --color -p |
| `glp` | git log --oneline --color -p |

### Diff (差异)
| 别名 | 命令 |
|------|------|
| `g d` | git diff |
| `gd` | git diff |
| `g di` | git diff |
| `gdi` | git diff |
| `g dc` | git diff --cached |
| `gdc` | git diff --cached |
| `g ds` | git diff --stat=200 |
| `gds` | git diff --stat=200 |
| `g dw` | git diff --word-diff |
| `gdw` | git diff --word-diff |

### Reset/Restore (重置/恢复)
| 别名 | 命令 |
|------|------|
| `g rs` | git reset |
| `grs` | git reset |
| `g rsh` | git reset --hard |
| `grsh` | git reset --hard |
| `g rss` | git reset --soft |
| `grss` | git reset --soft |
| `g un` | git restore |
| `gun` | git restore |
| `g uns` | git restore --staged |
| `guns` | git restore --staged |

### Revert (回退)
| 别名 | 命令 |
|------|------|
| `g rvr` | git revert |
| `grvr` | git revert |

### Stash (储藏)
| 别名 | 命令 |
|------|------|
| `g st` | git stash |
| `gst` | git stash |
| `g stp` | git stash pop |
| `gstp` | git stash pop |
| `g sta` | git stash apply |
| `gsta` | git stash apply |
| `g stl` | git stash list |
| `gstl` | git stash list |
| `g std` | git stash drop |
| `gstd` | git stash drop |

### Remote (远程)
| 别名 | 命令 |
|------|------|
| `g r` | git remote |
| `gr` | git remote |
| `g rv` | git remote -v |
| `grv` | git remote -v |
| `g ra` | git remote add |
| `gra` | git remote add |
| `g rd` | git remote remove |
| `grd` | git remote remove |

### Fetch (获取)
| 别名 | 命令 |
|------|------|
| `g f` | git fetch |
| `gf` | git fetch |
| `g fa` | git fetch --all --prune |
| `gfa` | git fetch --all --prune |

### Merge (合并)
| 别名 | 命令 |
|------|------|
| `g m` | git merge |
| `gm` | git merge |
| `g mf` | git merge --ff-only |
| `gmf` | git merge --ff-only |
| `g mo` | git merge -Xtheirs |
| `gmo` | git merge -Xtheirs |
| `g mm` | git merge -Xours |
| `gmm` | git merge -Xours |

### Rebase (变基)
| 别名 | 命令 |
|------|------|
| `g rb` | git rebase |
| `grb` | git rebase |
| `g rbi` | git rebase -i |
| `grbi` | git rebase -i |
| `g rbc` | git rebase --continue |
| `grbc` | git rebase --continue |
| `g rbun` | git rebase --abort |
| `grbun` | git rebase --abort |
| `g rbvi` | git rebase --edit-todo |
| `grbvi` | git rebase --edit-todo |
| `g rbsk` | git rebase --skip |
| `grbsk` | git rebase --skip |

### Clone (克隆)
| 别名 | 命令 |
|------|------|
| `clo` | git clone |
| `gclo` | git clone |
| `clob` | git clone -b |
| `gclob` | git clone -b |

### Tag (标签)
| 别名 | 命令 |
|------|------|
| `g t` | git tag |
| `gt` | git tag |
| `g tl` | git tag -l |
| `gtl` | git tag -l |
| `g tn` | git tag -n |
| `gtn` | git tag -n |
| `g ta` | git tag -a |
| `gta` | git tag -a |

### Blame (追溯)
| 别名 | 命令 |
|------|------|
| `g bl` | git blame |
| `gbl` | git blame |

### Clean (清理)
| 别名 | 命令 |
|------|------|
| `cln` | git clean --interactive -d |
| `gcln` | git clean --interactive -d |
| `g clnf` | git clean -d --force |
| `gclnf` | git clean -d --force |
| `g clnfx` | git clean -d --force -x |
| `gclnfx` | git clean -d --force -x |

## 配置文件

创建配置文件 `~/.git-alias.toml`:

```bash
g init
```

### 配置示例

```toml
[aliases]
# 自定义别名 (覆盖内置别名)
my = ["status", "-s", "-b"]
pushf = ["push", "--force-with-lease"]
wip = ["add", "-A"]

[settings]
# 默认分支名
main_branch = "main"

# 详细模式 (显示执行的命令)
verbose = false
```

## Shell 补全

### Bash

```bash
source <(g completions bash)
```

添加到 `.bashrc` 以持久化:

```bash
source <(g completions bash)
```

### Zsh

```bash
source <(g completions zsh)
```

添加到 `.zshrc` 以持久化:

```bash
source <(g completions zsh)
```

### Fish

```bash
g completions fish > ~/.config/fish/completions/g.fish
```

## 性能

- 二进制大小: ~1.1MB (release 编译)
- 启动时间: < 1ms (CPU 时间)
- 内存占用: < 3MB

## 许可证

MIT