git diffshows changes made since the file was last staged. If you make changes, stage them, then make more changes, this only shows you the more changes
git diff --stagedshows changes made to the file when it was staged, diffs against the committed version it's based off of. It doesn't include any changes you've made since staging.
git diff HEAD(where HEAD is the name of a commit - HEAD to compare with the latest commit, or a branch name to compare to the tip of that branch. In essence, unions
git diff HEAD