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.2.1.tar.gz (39.8 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.2.1-py3-none-any.whl (29.4 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for diffpick-0.2.1.tar.gz
Algorithm Hash digest
SHA256 1d155e1247267f2132816ec76d2e67e4441fb456b33ccfd75e73124a12cfbcbb
MD5 fffc6287ee1e44564fd5351b0383f8d2
BLAKE2b-256 073f7c1ab6b411517f6dc751d82bd81e5f9fbd2cb4a9eb3395b7650036a022fc

See more details on using hashes here.

Provenance

The following attestation bundles were made for diffpick-0.2.1.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.2.1-py3-none-any.whl.

File metadata

  • Download URL: diffpick-0.2.1-py3-none-any.whl
  • Upload date:
  • Size: 29.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.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 7694ab6faf375e66a5e419d62e306e0ad66a6036239ac9bd7811d16bc5a4553c
MD5 ea5f4ff71b8ec98eb016c860b0df4818
BLAKE2b-256 50c9b570338e28ada2626cd449186dff2fdabcc160f506f076cfb8e28bfdd1d3

See more details on using hashes here.

Provenance

The following attestation bundles were made for diffpick-0.2.1-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