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

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

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

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

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

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

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

具体过程可以参见下图

暂存区域

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

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查看更多精彩文章!
AntDream

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值