Git的三个工做区和文件的三种状态

本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一块儿天天进步一点点git

Git系列

咱们在使用Git的时候通常有3个工做区的概念:Git 仓库、工做目录以及暂存区域。其中工做目录比较好理解,就是咱们开发时修改文件的那些目录,Git 仓库就是咱们项目目录下面的 .git目录中的内容,而暂存区域是保存已经被Git标记过,将要提交保存到Git数据库中的文件的地方数据库

文件从咱们建立到编辑完提交Git帮咱们记录,一共要经历3种状态:已修改(modified)、 已暂存(staged)已提交(committed)bash

  • 刚刚开始时编辑文件,这个时候文件是处于 已修改(modified) 状态,文件是在工做目录微信

  • 修改完文件,咱们执行git add,这个时候文件就变为 已暂存(staged)状态,文件信息进入暂存区域,内容被保存到Git数据库中markdown

  • 而后咱们执行git commit,文件就变为已提交(committed)状态,建立了一个提交记录保存到了Git 仓库post

具体过程能够参见下图spa

暂存区域code

暂存区域是一个文件,保存了下次将提交的文件列表信息,通常在 Git 仓库目录中。对应于 index文件 中的内容。 这里须要特别注意暂存区里保存的内容,咱们能够经过 git ls-files --stage 命令来查看下里面的内容orm

git ls-files --stage
//输出
100644 9daeafb9864cf43055ae93beb0afd6c7d144bfa4 0	text.txt
100644 83baae61804e65cc73a7201a7252750c76066a30 0	bak/test.txt
复制代码

能够看到,暂存区里记录了文件的内容所对应的数据对象,以及文件的路径(文件名和文件所在目录)。实际上,暂存区保存的是一系列指向文件的索引,真正的文件内容都在 .git/objects 目录下,也就是Git数据库中。对象

考虑2种状况:

状况一:若是此时,咱们修改 text.txt 文件,而后从新 add 进暂存区,那暂存区会怎么变化?

实际上,暂存区仍是只有2条索引,只不过指向 text.txt 文件的索引变成了新的(这个时候 .git/objects 目录下会多出一条记录,记录text.txt 文件的新版本)

状况二:若是此时,咱们删除一条记录,好比text.txt 文件的索引记录,会有什么影响?

首先 .git/objects 目录下对应的那条数据并不会被删除,这也就是开头说的 你执行的 Git 操做,几乎只往 Git 数据库中增长数据 ,不会删除数据。

暂存区text.txt 文件的索引会被删除,text.txt 文件就会从新变为待 add 状态,此时若是咱们执行 commit 操做,提交的内容将不会包含text.txt 文件


欢迎关注个人公众号查看更多精彩文章!
复制代码

AntDream
相关文章
相关标签/搜索