Use --cached to compare staging area with repository. --staged is a synonym for --cached. Without --cached (or --staged), git diff compares working tree to repository:
git diff --cached
Show the difference between the last and second last commited version of a given file:
git diff HEAD~1 HEAD path/to/file.txt
Same thing, but more explicit
git diff HEAD~1 HEAD~0 path/to/file.txt
The following command shows the differences of a given file between its current local HEAD and the modified (uncommitted) changes to this file:
git diff HEAD path/to/file.txt
The diff between the original repository and the local HEAD(?):