giff 1.0.0

Visualizes the differences between the current HEAD and a specified branch in a git repository using a formatted table output in your terminal. The differences are displayed with color-coded additions and deletions for better readability.
giff-1.0.0 is not a library.

giff

A terminal UI for git diffs with interactive rebase support.

CI Crates.io License


Features

  • Side-by-side & unified diffs — toggle between layouts with a single key
  • Syntax highlighting — language-aware coloring via syntect
  • Dark & light themes — built-in themes with full customization through config
  • Interactive rebase — accept or reject individual changes, then commit
  • Rebase detection — notifies you when your branch is behind or has diverged
  • Vim-style navigation — keyboard-first with mouse scroll support
  • Help overlay — press ? anywhere to see all keybindings in context
  • Configurable — persistent settings via ~/.config/giff/config.toml

Install

cargo install giff

Or build from source:

git clone https://github.com/bahdotsh/giff.git
cd giff && cargo build --release

Usage

giff                        # uncommitted changes vs HEAD
giff main feature-branch    # diff between two refs
giff main                   # diff ref against working tree
giff --theme light          # override theme
giff -d "--stat"            # pass custom git diff args
giff --auto-rebase          # auto-rebase if behind upstream

Keybindings

Diff mode

Key Action
j / k Navigate down / up
PageDown / PageUp Page down / up
Home / End Jump to first / last item
Tab Toggle focus between file list and diff
h / l Focus file list / diff content
u Toggle unified / side-by-side view
t Toggle dark / light theme
r Enter rebase mode
? Show help
q / Esc Quit

Rebase mode

Key Action
j / k Next / previous change
a / x Accept / reject change
n / p Next / previous file with changes
c Commit accepted changes
? Show help
Esc Cancel rebase

Mouse

Scroll wheel works in both the file list and diff panes.

Configuration

~/.config/giff/config.toml

theme = "dark"

[themes.custom]
base = "dark"
accent = "#89b4fa"
fg_added = "#a6e3a1"
fg_removed = "#f38ba8"

See the built-in dark and light themes in src/ui/theme.rs for all available color keys.

Contributing

Contributions welcome — feel free to open an issue or submit a PR.

License

MIT or Unlicense, at your option.