$ zimbatm

I see a lot of users out there that don’t understand the Git staging area.

Conceptually this is the biggest change between traditional Source Control Management (SCM) tools and Git. Tutorials should explain that first:

Traditional SCM: code changes -> commit Git: code changes -> staging area -> commit

To understand Git, the important part is to form that mental model. The code changes don’t go to a commit directly. Instead, they are put in that staging area. That area is a virtual place where all the changes get accumulated. When typing git commit, the changes are moved from that area into the commit.

A user who doesn’t have that mental model will find the Git tooling confusing. This feature both provides more flexibility, and makes all the CLI interfaces more complicated to use.

Here is how I translate a number of commands mentally:

Hope this helps, z

< EOF >
       \     (\/)
        \   (_o |
             /  |
             \  \______
              \        )o
               /|----- |
               \|     /|