title: Why does Git have a Workspace, Staging Area, and Local Repository?
body: <p>I am trying to understand why Git has so many places to store changes. Imagine a simpler Git model that has only a local repository (and not a separate staging area or workspace). In this model:</p>
  
  <ol>
  <li>We could pick files in the local repository we want Git to track </li>
  <li>We could track changes by taking snapshots of the repository at different points in time</li>
  <li>We could fetch changes to origin/master and merge as usual</li>
  <li>We could have multiple branches and switch between them</li>
  <li>We could push changes from the local repository to "origin" as usual</li>
  </ol>
  
  <p>In other words, we could do most of what Git now does, but without the conceptual clutter of a workspace, staging area, and local repository. Why is it useful to have all three? </p>