The book Pro Git says that the staging area is just a list, or index, that says which files will be committed when a git commit
is done, and now the name inde
So how can the "staging area" keep track of what the first edit was if it is just an index -- a list?
An index is a list of names and pointers to content. In books, it's page numbers. In the Git index, it's object ID's in the repository's object database.
That's what the Git index is, a pathname-indexed list of content pointers.
git add
for some pathname is basically
sha=`git hash-object -w path/to/it`
git update-index --cacheinfo 100644,$sha,path/to/it
except git add
checks for executable files and uses 100755
for those, and does recursive adds and checks your .gitignore
and whatever else seems like it's usually most convenient. It's a convenience command for adding content to the object db and updating the index.