I have had same problem. I found the thread when I search solution on google, still I don't find any clue. But I think I found the reason after studying, the below example will explain clearly my clue.
echo "new text" > new.txt
git add new.txt
git commit -m "dummy"
for now, the file new.txt is considered as a text file.
echo -e "newer text\000" > new.txt
git diff
you will get this result
diff --git a/new.txt b/new.txt
index fa49b07..410428c 100644
Binary files a/new.txt and b/new.txt differ
and try this
git diff -a
you will get below
diff --git a/new.txt b/new.txt
index fa49b07..9664e3f 100644
--- a/new.txt
+++ b/new.txt
@@ -1 +1 @@
-new file
+newer text^@