title: What are the differences between these git diff commands?
body: <p>What are the differences between the following git commands?</p>
  
  <ol>
  <li><code>git diff HEAD</code></li>
  <li><code>git diff HEAD^</code></li>
  <li><code>git diff --cached</code> or the synonym <code>git diff --staged</code></li>
  <li><code>git diff</code></li>
  </ol>