I wrote a very simple Python script to see which arguments git-diff passes to the external diff program when comparing files across branches: $ env GIT_EXTERNAL_DIFF=./print_argv.py git diff origin/branch1:file1.txt origin/branch2:file2.txt ['./print_argv.py', 'file1.txt', '/tmp/QRaIJ1_file1.txt', '802b1c4ed7b06162b2ce09b7db72a576695b96e5', '100644', '/tmp/AZuOJ1_file2.txt', '076e8e37a712d8a66c0c3d1a103050dc509ca6ff', '100644', 'file2.txt', 'index 802b1c4..076e8e3 100644\n'] According to the docs (https://www.git-scm.com/docs/git/2.22.0#Documentation/git.txt-codeGITEXTERNALDIFFcode), git-diff is supposed to pass 7 parameters: path old-file old-hex old-mode new-file new-hex new-mode This is not what I am seeing here. Is this a bug or incorrect/incomplete documentation? Tested with git 2.22.0 and 2.17.1.