giff 是一款专注于解决「终端里看 diff 不够直观」这个问题的小工具。它用 Rust 编写,体积小巧,但功能足够应对日常代码审查和交互式 rebase 场景。

在终端里处理复杂的 merge conflict 或者整理 commit 历史时,原生 git diff 的输出往往信息密度过高,难以快速定位关键变更。giff 通过更清晰的视觉呈现和交互设计,把这个过程变得更可控。

项目概览

属性内容
GitHubbahdotsh/giff
Stars241
语言Rust
特点终端 UI、交互式 rebase 支持、轻量快速
最后更新今天

它解决了什么问题

日常开发中,这些场景并不陌生:

  1. 审查 PR 前快速过一遍变更 —— git diff main...feature 的输出淹没在终端滚动条里
  2. 交互式 rebase 时选错 commit —— git rebase -i 的文本编辑器体验对新手不够友好
  3. 对比两个分支的差异 —— 需要在多个文件间跳转查看,终端里的跳转命令容易打断思路

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
rrebase 模式下标记 reword
srebase 模式下标记 squash
drebase 模式下标记 drop
q退出

与同类工具对比

工具Stars特点适用场景
delta27k+语法高亮、side-by-side 对比作为 git pager 替代
gitui18k+完整 Git TUI,支持 staging/blame日常 Git 操作
lazygit58k+功能最全面的终端 Git 客户端复杂工作流
giff241专注 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