Skip to main content

An interactive git commit picker and diff viewer, inspired by lazygit and powered by git-delta

Project description

diffpick

An interactive commit picker and diff viewer for git.

Designed as a diff-viewing companion to lazygit — built because viewing diffs felt like the rough edge in lazygit's otherwise excellent UX. Keybindings follow lazygit conventions where it makes sense; see KEYBINDINGS.md for the full table.

Rendering is done by git-delta.

What it does

  • Lazygit-inspired commit picker with single-commit and range selection
  • Side-by-side or unified diff view (auto-adapts to terminal width)
  • Zoom into a commit to browse its file tree
  • Hunk navigation, full-file context view, "open in editor" jump
  • Filter by path or commit subject
  • Familiar keybindings: j/k, /, v for range, F7 for next hunk, ? for help

Prerequisites

Install delta:

macOS:        brew install git-delta
Windows:      winget install dandavison.delta   (or: scoop install delta)
Debian/Ubuntu: sudo apt install git-delta
Arch:         sudo pacman -S git-delta
Fedora:       sudo dnf install git-delta
Any:          cargo install git-delta

If you don't have Python yet:

  • macOS: brew install python
  • Windows: install from https://python.org or winget install Python.Python.3.12
  • Linux: already there on most distros (python3 --version to check)

Install

The recommended way is pipx, which installs CLI tools into isolated environments:

pipx install diffpick

If you don't have pipx:

macOS:    brew install pipx && pipx ensurepath
Windows:  python -m pip install --user pipx && python -m pipx ensurepath
Linux:    sudo apt install pipx && pipx ensurepath   (or: python -m pip install --user pipx)

Alternative — with uv:

uv tool install diffpick

Or plain pip into a venv:

python -m venv ~/.venvs/diffpick
~/.venvs/diffpick/bin/pip install diffpick
~/.venvs/diffpick/bin/diffpick

Usage

diffpick                  # open the TUI in the current repo
diffpick path/to/file     # narrow to commits touching one path
diffpick --side-by-side   # force side-by-side layout
diffpick --unified        # force unified layout
diffpick --help

Inside the TUI, press ? for the keybinding list.

Configuration

Editor for "open file at line"

Pressing o on a focused hunk or selected file launches it in your editor at the right line. The command is resolved in this order:

  1. DIFFPICK_OPEN_CMD — full format string, with {file} and {line} placeholders. Power-user override:
    export DIFFPICK_OPEN_CMD='code -g {file}:{line}'
    
  2. $VISUAL or $EDITOR — if the basename matches a known editor (code, code-insiders, vim, nvim, subl, idea, pycharm, webstorm, goland, rubymine, emacs), the right "open at line" invocation is used automatically. Unknown editors are launched without a line number.
  3. Fallbackcode -g {file}:{line} if code is on PATH.

WSL note

If you're on WSL and use VS Code, install the WSL extension in your Windows VS Code (formerly "Remote - WSL"). With the extension and code on PATH inside WSL, opening files from diffpick "just works." If code is missing, run Shell Command: Install 'code' command in PATH from VS Code's command palette (Ctrl+Shift+P).

License

MIT — see LICENSE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

diffpick-0.1.0.tar.gz (37.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

diffpick-0.1.0-py3-none-any.whl (27.4 kB view details)

Uploaded Python 3

File details

Details for the file diffpick-0.1.0.tar.gz.

File metadata

  • Download URL: diffpick-0.1.0.tar.gz
  • Upload date:
  • Size: 37.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for diffpick-0.1.0.tar.gz
Algorithm Hash digest
SHA256 976d830465487f0080f577917c5a4054e1de83baedaebbce8e7ed46ba5958982
MD5 4f618748961399c6e2b3b858bbd04833
BLAKE2b-256 13eb96468a49132f1e31eb49a020a9a162e38d8e029905d16c578fa6f7c9c6a7

See more details on using hashes here.

Provenance

The following attestation bundles were made for diffpick-0.1.0.tar.gz:

Publisher: publish.yml on steveoleary/diffpick

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file diffpick-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: diffpick-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 27.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for diffpick-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 53a75350a4193719d4d9821f661eb3ac309b1016bfc0ee4f0f624e537cd01bcc
MD5 3b20e69296dddfcad1933b50fa46a33c
BLAKE2b-256 7c8e25e6370259fd8db937830c08bafc446f701ad915a9417e9e76fa487a1a19

See more details on using hashes here.

Provenance

The following attestation bundles were made for diffpick-0.1.0-py3-none-any.whl:

Publisher: publish.yml on steveoleary/diffpick

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page