①git diffは作業ディレクトリ(working dir)とインデックス(index)の差異
②git diff [commit]は作業ディレクトリと指定されたコミット間の差異
③git diff --cached [commit]はインデックスと指定されたコミットの差異で、コミット指定しない場合はHEAD
④git diff [commit] [commit]はコミット間の差異
作業ディレクトリ(working dir)と呼ばれるものは一般的にwork treeと呼ばれる様なので追記しておきます。
また、work treeはuntrackedなファイルはdiffでは対象外。
あと、work treeからindexへはgit addで追加される。(git addでindexに追加したからといって、work treeの状態は変わらないため、
git addしたあとはgit diffでの差異は見れなくなるが、git diff commitは差異が出る