This repository is set up to reproduce the issue: git clone --recurse-submodules https://github.com/Chetic/super.git The following command behaves as expected and produces a diff to files in submodules: git diff --submodule=diff HEAD~1 HEAD But the following command produces a diff of commit IDs referred to by the super repository, i.e. same behavior as without the "--submodule=diff" argument. I expected this to behave like the command above but displayed with an external diff tool: git difftool --submodule=diff HEAD~1 HEAD