Git keeps your work in three places. The working directory is the folder you edit. The staging area (also called the index) is a draft of your next commit. The repository is the history of every commit you've made.
A change starts in the working directory. git add copies it into the staging area. git commit takes everything that's staged and saves it as a snapshot — a commit — with a message, an author, a timestamp and a pointer to the commit before it.
That middle step is the one people skip over, and it's what makes Git precise: you choose exactly what goes into each snapshot, rather than whatever happens to be lying around.
Try it
Someone edited README.md. Run git status to see where that change is, stage it, and commit it. Watch the file move across the three areas, and a new commit appear in the graph.
Every commit gets a hash — a name like 3f9a2c1 computed from its contents and its parent. Change anything and the hash changes.