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,/,vfor range,F7for next hunk,?for help
Prerequisites
- Python ≥ 3.10
- git
- git-delta
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 --versionto 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:
DIFFPICK_OPEN_CMD— full format string, with{file}and{line}placeholders. Power-user override:export DIFFPICK_OPEN_CMD='code -g {file}:{line}'$VISUALor$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.- Fallback —
code -g {file}:{line}ifcodeis 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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file diffpick-0.2.2.tar.gz.
File metadata
- Download URL: diffpick-0.2.2.tar.gz
- Upload date:
- Size: 40.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
de0275e100df2e75b80f67b03ad9563f3381c96ac4317bde93afa4721877d06a
|
|
| MD5 |
f8ba07316d012c451fcf2ca0bc5bb66c
|
|
| BLAKE2b-256 |
f03b246fb191f4805aacc5ef9e22f5c7083bc279fab0dbe486856072b31d2cf5
|
Provenance
The following attestation bundles were made for diffpick-0.2.2.tar.gz:
Publisher:
publish.yml on steveoleary/diffpick
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
diffpick-0.2.2.tar.gz -
Subject digest:
de0275e100df2e75b80f67b03ad9563f3381c96ac4317bde93afa4721877d06a - Sigstore transparency entry: 1454017725
- Sigstore integration time:
-
Permalink:
steveoleary/diffpick@ecfb3549fa29315bcd475d6601b7363fecbfe5b6 -
Branch / Tag:
refs/tags/v0.2.2 - Owner: https://github.com/steveoleary
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@ecfb3549fa29315bcd475d6601b7363fecbfe5b6 -
Trigger Event:
push
-
Statement type:
File details
Details for the file diffpick-0.2.2-py3-none-any.whl.
File metadata
- Download URL: diffpick-0.2.2-py3-none-any.whl
- Upload date:
- Size: 29.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
76dbeab90490c73853e40278f513d5b43b19de2377b481d2adac0132d9ccd283
|
|
| MD5 |
2470ef58ecdb5497a4583d71c9ba476c
|
|
| BLAKE2b-256 |
7c7818a02038c9ec0b90ca4bef1586904ee3b3509d473f5ce256bb6fe23c6f48
|
Provenance
The following attestation bundles were made for diffpick-0.2.2-py3-none-any.whl:
Publisher:
publish.yml on steveoleary/diffpick
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
diffpick-0.2.2-py3-none-any.whl -
Subject digest:
76dbeab90490c73853e40278f513d5b43b19de2377b481d2adac0132d9ccd283 - Sigstore transparency entry: 1454017832
- Sigstore integration time:
-
Permalink:
steveoleary/diffpick@ecfb3549fa29315bcd475d6601b7363fecbfe5b6 -
Branch / Tag:
refs/tags/v0.2.2 - Owner: https://github.com/steveoleary
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@ecfb3549fa29315bcd475d6601b7363fecbfe5b6 -
Trigger Event:
push
-
Statement type: