The command git add stages a file. In terms of Git’s file classifications, if a file is untracked, git add converts that file’s status to tracked. When git add is used on a directory name, all of the files and subdirectories beneath it are staged recursively.
Let’s continue the example from the previous section:
git status# On branch master # # Initial commit # # Untracked files: # (use "git add <file>..." to include in what will be committed) # # .gitignore # data # Track both new files. $
git add data .gitignore$
git status# On branch master # # Initial commit # # Changes to be committed: # (use "git rm --cached <file>..." to unstage) # # new file: .gitignore # new file: data #
The first git status shows you that two files are untracked and reminds you that to make a file tracked, you simply need to use git add. After git add, both data and .gitignore are staged and tracked, ready to be added to the repository on the next commit.
In terms of Git’s object model, the entirety of each file, at the moment you issued git add, was copied into the object store and indexed by its resulting SHA1 name. Staging a file is also called “caching a file” or “putting a file in the index.”
You can use git ls-files to peer under the object model hood and find the SHA1 values for those staged files:
git ls-files --stage100644 0487f44090ad950f61955271cf0a2d6c6a83ad9a 0 .gitignore 100644 534469f67ae5ce72a7a274faf30dee3c2ea1746d 0 data
Most of the day-to-day changes within your repository ...