Highlight changed lines and changed bytes in each changed line Highlight changed lines and changed bytes in each changed line git git

Highlight changed lines and changed bytes in each changed line


The diff-highlight Perl contrib script produces output so similar to that of the Trac screenshots that it is likely that Trac is using it:

enter image description here

Install with:

wget https://raw.githubusercontent.com/git/git/fd99e2bda0ca6a361ef03c04d6d7fdc7a9c40b78/contrib/diff-highlight/diff-highlight && chmod +x diff-highlight

Move the file diff-highlight to the ~/bin/ directory (or wherever your $PATH is), and then add the following to your ~/.gitconfig:

[pager]        diff = diff-highlight | less        log = diff-highlight | less        show = diff-highlight | less

Single copy paste install suggested by @cirosantilli:

cd ~/bincurl -O https://raw.githubusercontent.com/git/git/fd99e2bda0ca6a361ef03c04d6d7fdc7a9c40b78/contrib/diff-highlight/diff-highlightchmod +x diff-highlightgit config --global pager.log 'diff-highlight | less'git config --global pager.show 'diff-highlight | less'git config --global pager.diff 'diff-highlight | less'git config --global interactive.diffFilter diff-highlight


While using git diff or git log and possibly others, use option --word-diff=color (there are also other modes for word diffs BTW)


diff-so-fancy is a diff-highlighter designed for human eyeballs.

It removes the leading +/- which are annoying for cut/paste and makes clear sections between files.

Coloured git (left) vs diff-so-fancy (right - note the character-level highlights):

diff-so-fancy output

If you want thediff-so-fancy (right side) output but not constrained to files in a git repository, add the following function to your .bashrc to use it on any files:

dsf() { git diff --no-index --color "$@" | diff-so-fancy; }

Eg:

dsf original changed-file

Character level highlighting and standard diff format

If you don't like the non-standard formatting of diff-so-fancy, but still want character-level git highlighting, use diff-highlight which will take git's output and produce the really pretty standard diff-format output:

diff-highlight screenshot

To use it by default from git, add to your .gitconfig:

[color "diff-highlight"]  oldNormal = red bold  oldHighlight = red bold 52  newNormal = green bold  newHighlight = green bold 22[pager]  diff = diff-highlight | less -FRXsu --tabs=4

The [pager] section tells git to pipe its already colourised output to diff-highlight which colourises at the character level, and then pages the output in less (if required), rather than just using the default less.