The pager 'less' escapes some characters when calling 'git diff'. This is what I might get: $ git diff --cached diff --git a/some_file b/some_file new file mode 100644 index 0000000..357323f --- /dev/null +++ b/some_file @@ -0,0 +1 @@ +<U+FEFF>Hello \ No newline at end of file This example is a simple file encoded in UTF-8 *with BOM*. On the other hand, the built-in git output shows this: $ git --no-pager diff --cached diff --git a/some_file b/some_file new file mode 100644 index 0000000..357323f --- /dev/null +++ b/some_file @@ -0,0 +1 @@ +Hello \ No newline at end of file You can see 'less' shows <U+FEFF> explicitly, while it is implicit and hidden with git's built-in output. Other characters behave the same, like ZERO WIDTH SPACE <U+200B>, and I believe many others. This is particularly annoying when there are other changes on the same line. Here I add ' world!' but also remove the BOM: $ git diff diff --git a/some_file b/some_file index 357323f..6769dd6 100644 --- a/some_file +++ b/some_file @@ -1 +1 @@ -<U+FEFF>Hello \ No newline at end of file +Hello world! \ No newline at end of file Compare with: $ git --no-pager diff diff --git a/some_file b/some_file index 357323f..6769dd6 100644 --- a/some_file +++ b/some_file @@ -1 +1 @@ -Hello \ No newline at end of file +Hello world! \ No newline at end of file In the first example I can see both changes, in the second example the BOM removal is hidden and I won't notice it because there is indeed another genuine change on the same line. I'll add a third example with CRLF line-terminators: $ git diff diff --git a/some_file b/some_file index 357323f..dfd6895 100644 --- a/some_file +++ b/some_file @@ -1 +1 @@ -<U+FEFF>Hello \ No newline at end of file +Hello world!^M and: $ git --no-pager diff diff --git a/some_file b/some_file index 357323f..dfd6895 100644 --- a/some_file +++ b/some_file @@ -1 +1 @@ -Hello \ No newline at end of file +Hello world! My thoughts are that git should add this feature and tend towards less's behavior. A diff output should show as much as possible. I would happily use 'less' all the time, but unfortunately I don't think I can. For instance, 'git add --patch', which I use quite often, prints through git's built-in output, and I miss less's features. Joris Valette.