git-alias 1.2.9

A fast git alias tool with dual-style command support
# Git-Alias

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

## 特性

- **双模式调用**: 支持直接调用 (`gs`) 和 g 前缀调用 (`g s`)
- **119+ 内置别名**: 覆盖所有常用 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 "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 工具(claude/opencode)自动生成版本变更摘要:

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

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

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

**输出示例:**

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

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

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

### 🔧 优化与重构
- **Kernel 更新**:合并最新 freeagent-kernel,支持 subagent

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

**注意**:需要提前安装 claude 或 opencode 等 AI 工具。

## 别名列表

运行 `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 -m |
| `g ca` | git commit --amend |
| `gca` | git commit --amend |
| `g cn` | git commit --no-edit --amend |
| `gcn` | git commit --no-edit --amend |

### 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 co` | git checkout |
| `gco` | git checkout |
| `g c` | git checkout |
| `gc` | git checkout |
| `g cb` | git checkout -b |
| `gcb` | 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 --oneline |
| `g lgg` | git log --graph --oneline --all |
| `g ls` | git log --no-merges |
| `gls` | git log --no-merges |
| `g lsa` | git log --no-merges --all |
| `glsa` | git log --no-merges --all |
| `g lsm` | git log --all |
| `glsm` | git log --all |
| `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 rsc` | git restore --staged |
| `grsc` | git restore --staged |

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

### Stash (储藏)
| 别名 | 命令 |
|------|------|
| `g sh` | git stash |
| `gsh` | git stash |
| `g shp` | git stash pop |
| `gshp` | git stash pop |
| `g sha` | git stash apply |
| `gsha` | git stash apply |
| `g shl` | git stash list |
| `gshl` | git stash list |
| `g shd` | git stash drop |
| `gshd` | 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 |

### 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 |

### 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