# 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 引入的无法启动问题
### ✨ 新功能
- **分析**:客户端可开启显示,实时展示分析结果
- **广场**:新增广场界面
### 🔧 优化与重构
- **Kernel 更新**:合并最新 kernel
### 📝 其他
- 版本更新至 **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 -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 rsc` | git restore --staged |
| `grsc` | 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 |
### 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