### 2.2.2

.git/index 是包含索引的目录树,这个目录树记录了文件名,文件等状态信息

![版本库](https://lsky.mhrooz.xyz/2024/08/15/cde4b123b19fe.png)

`HEAD`指向当前的分支,图中的master中有一个git独特的存储方式,可以在不同的commit之间切换. master就是一个分支

git add就是把工作去的内容先加到暂存区,分支还没有被更改

如果想更改分支里的内容,就要commit中

`git rm --cached <file>`从暂存区中删除文件

`git reset HEAD` 替换暂存区为HEAD指向的分支的内容(清除暂存区)

`git checkout -- <file>` 从暂存区中拿出文件替换工作区的内容

`git checkout HEAD .`或者是`git checkout HEAD <file>`用分支中的文件替换暂存区和工作区的文件

### 2.2.3

`git ls-tree`查看HEAD指向的目录树

`git ls-files`查看暂存区的目录树

`git diff`比较暂存区和工作区的不同

`git diff HEAD`比较HEAD分支和工作区的不同

`git diff --cached` 比较暂存区和HEAD分支的不同