Easy Tutorial
❮ Git Init Git Commit ❯

Git Working Directory, Staging Area, and Repository


Basic Concepts

Let's first understand the concepts of Git Working Directory, Staging Area, and Repository:

The following diagram illustrates the relationship between the working directory, the staging area within the repository, and the repository:

-

The left side of the diagram represents the working directory, and the right side represents the repository. The area marked as "index" in the repository is the staging area (stage/index), and the area marked as "master" represents the directory tree of the master branch.

-

In the diagram, "HEAD" is actually a cursor pointing to the master branch. Therefore, wherever "HEAD" appears in the commands, it can be replaced with "master".

-

The area marked as "objects" in the diagram is the Git object database, located in the ".git/objects" directory, containing various objects and their contents.

-

When you execute the git add command on a modified (or new) file in the working directory, the directory tree of the staging area is updated, and the content of the modified (or new) file is written into a new object in the object database, with the object's ID recorded in the file index of the staging area.

-

When you perform a commit operation (git commit), the directory tree of the staging area is written into the repository (object database), and the master branch is updated accordingly. The directory tree pointed to by master is the directory tree of the staging area at the time of the commit.

-

When you execute the git reset HEAD command, the directory tree of the staging area is rewritten, replaced by the directory tree pointed to by the master branch, but the working directory remains unaffected.

-

When you execute the git rm --cached <file> command, the file is directly removed from the staging area, but the working directory is not changed.

-

When you execute the git checkout . or git checkout -- <file> command, the files in the staging area replace the files in the working directory. This operation is dangerous as it clears changes in the working directory that have not been added to the staging area.

-

When you execute the git checkout HEAD . or git checkout HEAD <file> command, the files from the master branch pointed to by HEAD replace the files in both the staging area and the working directory. This command is highly dangerous as it not only clears uncommitted changes in the working directory but also clears uncommitted changes in the staging area.

❮ Git Init Git Commit ❯