Git工作区、暂存区和版本库
基本概念
让我们先了解一下Git工作区、暂存区和版本库的概念
工作区:是你在电脑上可以看到的目录。临时存储区:英文称为stage或index。一般存储在索引文件(。git/index)下的‘git目录’,所以我们有时称之为临时存储区索引。版本库:工作区有一个隐藏目录。Git,它不是工作空间,而是git的版本库。
下图显示了工作区、版本库中的暂存区和版本库之间的关系:
工作区在左边,版本库在右边。版本库中标有‘index’的区域为stage,index),标有‘master’的区域为master分支所代表的目录树。
在图中,我们可以看到“HEAD”实际上是一个指向主分支的“光标”。因此,HEAD在图示命令中出现的位置可以由master替换。
图中由对象标记的区域是Git的对象库,它实际上位于。git/objects '目录,包含各种创建的对象和内容。当对工作区修改(或新增)的文件执行‘git add’命令时,更新临时存储区的目录树,将工作区修改(或新增)的文件内容写入对象库中的新对象,并将该对象的ID记录在临时存储区的文件索引中。
当执行git commit时,暂存区的目录树被写入版本库(对象库),主分支将相应更新。也就是说,主控指向的目录树是提交时临时存储区的目录树。
执行‘git reset HEAD’命令时,暂存区的目录树将被重写,并被主分支指向的目录树替换,但工作区不会受到影响。
当执行命令' gitr m-cache file '时,该文件将直接从暂存区中删除,工作区不会改变。
执行“git签出”时。或者' git checkout - file '命令,工作区中的文件将被临时存储区中的所有或指定文件替换。此操作很危险,它将清除工作区中尚未添加到便笺簿的更改。
执行“git结账头”时或者‘git check HEAD file’命令,HEAD指向的主分支中的全部或部分文件将替换暂存区和工作区中的文件。这个命令也非常危险,因为它不仅会清除工作区中未提交的更改,还会清除暂存区中未提交的更改。