giff:241⭐的终端 Git diff 查看器,交互式 rebase 更顺手
giff 是一款专注于解决「终端里看 diff 不够直观」这个问题的小工具。它用 Rust 编写,体积小巧,但功能足够应对日常代码审查和交互式 rebase 场景。
在终端里处理复杂的 merge conflict 或者整理 commit 历史时,原生 git diff 的输出往往信息密度过高,难以快速定位关键变更。giff 通过更清晰的视觉呈现和交互设计,把这个过程变得更可控。
项目概览
| 属性 | 内容 |
|---|---|
| GitHub | bahdotsh/giff |
| Stars | 241 |
| 语言 | Rust |
| 特点 | 终端 UI、交互式 rebase 支持、轻量快速 |
| 最后更新 | 今天 |
它解决了什么问题
日常开发中,这些场景并不陌生:
- 审查 PR 前快速过一遍变更 ——
git diff main...feature的输出淹没在终端滚动条里 - 交互式 rebase 时选错 commit ——
git rebase -i的文本编辑器体验对新手不够友好 - 对比两个分支的差异 —— 需要在多个文件间跳转查看,终端里的跳转命令容易打断思路
giff 的思路很简单:把 diff 信息用更清晰的终端 UI 呈现出来,同时保留键盘操作的效率。
核心特性
1. 终端图形化 Diff 展示
不同于纯文本输出,giff 使用终端 UI 框架(ratatui)来展示 diff:
- 侧边栏显示变更文件列表
- 主区域展示选中文件的详细 diff
- 语法高亮区分添加/删除/修改
- 支持行号对照
这种布局类似 VS Code 的 diff 视图,但完全运行在终端里,无需启动编辑器。
2. 交互式 Rebase 支持
这是 giff 的差异化功能。运行 giff --rebase 后:
- 可视化展示待整理的 commit 列表
- 键盘快捷键调整 commit 顺序(上/下移动)
- 快速标记 pick/squash/drop/reword 操作
- 实时预览操作后的结果
对于需要频繁整理 feature branch 的开发者,这比记忆 git rebase -i 的文本编辑命令更直观。
3. 轻量与速度
作为 Rust 项目,giff 的启动速度和内存占用都控制得很好:
- 二进制文件约 2MB
- 冷启动时间 < 100ms
- 处理大型 diff(100+ 文件)无明显卡顿
对比一些基于 Electron 的 Git GUI 工具,giff 在远程服务器或容器环境里用起来更顺手。
4. 零配置上手
安装后直接使用,无需配置文件:
# 查看当前工作区与暂存区的差异
giff
# 查看指定 commit 的变更
giff <commit-hash>
# 对比两个分支
giff main..feature
# 启动交互式 rebase
giff --rebase
快速开始
安装
macOS / Linux (Homebrew):
brew install bahdotsh/tap/giff
Cargo (Rust 包管理器):
cargo install giff
预编译二进制文件: 从 GitHub Releases 下载对应平台的二进制文件,放入 PATH 即可。
基础用法
# 查看暂存区 diff
giff
# 查看特定文件的 diff
giff -- src/main.rs
# 查看两个 commit 之间的差异
giff abc123..def456
# 交互式 rebase(当前分支)
giff --rebase
# 交互式 rebase(指定范围)
giff --rebase main..HEAD
键盘快捷键
| 按键 | 功能 |
|---|---|
j / ↓ | 向下移动 |
k / ↑ | 向上移动 |
Enter | 查看文件详细 diff |
r | rebase 模式下标记 reword |
s | rebase 模式下标记 squash |
d | rebase 模式下标记 drop |
q | 退出 |
与同类工具对比
| 工具 | Stars | 特点 | 适用场景 |
|---|---|---|---|
| delta | 27k+ | 语法高亮、side-by-side 对比 | 作为 git pager 替代 |
| gitui | 18k+ | 完整 Git TUI,支持 staging/blame | 日常 Git 操作 |
| lazygit | 58k+ | 功能最全面的终端 Git 客户端 | 复杂工作流 |
| giff | 241 | 专注 diff/rebase,极简设计 | 快速审查、commit 整理 |
giff 的定位是「只做一件事,但做好」—— 它不提供完整的 Git 客户端功能,而是在 diff 查看和 rebase 交互这两个场景下做深度优化。
适用场景
giff 很适合:
- 习惯终端工作流,但希望 diff 查看体验更好的开发者
- 需要频繁进行交互式 rebase 来整理 commit 的人
- 在远程服务器/容器环境里工作,无法启动图形化 Git 客户端的场景
- 追求启动速度和资源占用的轻量级用户
不太适合:
- 需要完整 Git 客户端功能(staging、branch 管理、remote 操作等)的用户 → 用 lazygit/gitui
- 喜欢图形化 IDE 集成的用户 → VS Code / JetBrains 的 Git 工具更成熟
- 需要 side-by-side 代码对比的用户 → delta 的展示效果更好
小结
giff 不是要改变你的工作流,而是在特定场景下让体验更好。如果你经常觉得 git diff 的输出难以阅读,或者对 git rebase -i 的文本编辑方式感到繁琐,花两分钟安装 giff 试试看。
241 个 star 意味着它还很年轻,但核心功能已经可用,而且今天还在积极更新。对于这样一个小而专注的工具,值得关注。
| 属性 | 内容 |
|---|---|
| 仓库 | https://github.com/bahdotsh/giff |
| 许可证 | MIT |
| 语言 | Rust |
| 维护者 | @bahdotsh |