What are the differences between the following git commands?
git diff HEAD
git diff HEAD^
git diff --cached>
git diff --cached
git diff --staged
git diff