Until recently I was using the diff-highlight
script that comes with a git installation, but it stopped working and instead of investigating why, I started looking for more modern alternatives.
One of the projects I kept seeing was Delta so I gave it a quick go and it was a great replacement with nice additional features.
It is nice and fast (written in Rust of course) and renders nice diffs when I am using git diff
or git add -p
(where -p
is short for --patch
) to add files to commits.
As an aside, if you’re not already using git add -p
to stage your commits then you’re missing out.
It allows you to interactively stage a file or just part of it (git refers to these parts as hunks).
I have previously written about this in Staging patches with git add.
Getting setup is pretty easy by installing the git-delta
package from your systems package manager - I am using Nix with home-manager that has a delta configuration built-in, but it could be Homebrew or even Chocolately.
Now you just need configure git to use it as the pager and for interactive diffs (git add -p
for example).
In ~/.gitconfig
you can add something like the following to get started and as a good base to customise further too.
The configuration options are in the delta documentation.
[core]
pager = delta
[interactive]
diffFilter = delta --color-only
[delta]
navigate = true # use n and N to move between diff sections
[merge]
conflictstyle = diff3
[diff]
colorMoved = default
As I am using home-manager my configuration looks more like this Nix configuration, which automatically handles setting delta as the pager and interactive diff tool.
programs.git = {
enable = true;
delta = {
enable = true;
options = {
hyperlinks = true; # makes file paths clickable in the terminal
hyperlinks-file-link-format = "vscode://file/{path}:{line}"; # opens links in vscode
features = "decorations interactive";
interactive = {
keep-plus-minus-markers = false;
};
decorations = {
commit-decoration-style = "bold yellow box ul";
file-style = "bold yellow ul";
file-decoration-style = "none";
};
};
};
};
Now if you run git add -p
you’ll get nicely highlighted diffs for each hunk that you’re staging for commit.
Delta makes it easier to read the diffs and therefore, hopefully, spot mistakes quicker.