认识Git的工作区、暂存区与版本库

使用 git init 命令在 gitcode 文件夹下创建如下图所示的Git仓库。现在思考这样一个问题:gitcode目录下创建的README文件可以直接被git管理和追踪吗?

答案是否定的,因为只有 Git 本地仓库中的文件才可以被版本控制。什么?难道当前的 gitcode 文件夹不是 Git 的本地仓库吗。为了理解这个问题,我们需要理解 Git 的工作区、暂存区与版本库的区别。

🎯[概念梳理]

  • 工作区:即电脑上你要写代码或文件的目录,例如上面的 gitcode 文件夹
  • 版本库:又名仓库,英文名 repository 。工作区有⼀个隐藏目录 .git ,它不算工作区,而是Git的版本库。这个版本库里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以"还原"
  • 暂存区:英文叫stage或index。⼀般存放在 .git 目录下的index文件(.git/index)中,我们把暂存区有时也叫作索引(index)。

​ 通过上面的梳理,我们明白了,gitcode 本质上是工作区,而 .git 才是真正的版本仓库。我们要想管理我们的代码,就需要将相应的代码添加到版本库中。

新的问题随之而来:我们可以直接将README文件移动到 .git 文件夹中,从而交给git管理吗?这种行为是万万不可取的,.git 文件夹中是不允许进行任何手动修改的,避免git仓库的结构被人为破坏。

为了让README文件被版本库管理,我们需要进行一些额外的操作将工作区中的文件添加到版本库中

  1. add操作:将工作区的修改(包括新增、删除、修改)内容保存到版本库的暂存区中
  2. commit操作:将暂存区中的内容添加到master分支下

那么它具体是如何实现的呢?其实在版本库中还有一个对象库 object ,工作区中的 修改内容 (不是对整个文件内容进行拷贝和复制)会以 git对象 的形式写入到对象库中,对git对象的管理就可以实现对文件版本的控制。

  1. 进行add操作时,会将工作区中的修改内容以git对象 的形式写入到 对象库 中。而暂存区中存放的是对应git对象的 索引,因此暂存区是比较轻量的
  2. 进行commit操作时,写入master分支的也是对应git对象的索引,因此master分支也是比较轻量的

口说无凭,我们从文件层面上来认识各个分区:

  • index :暂存区,git add后首先会将 git 对象的索引添加到暂存区中
  • HEAD :指向当前的工作分支最新提交,默认为 master 分支
  • objects :对象库,管理着一个个 git 对象,其存放的形式如下

通过本篇博客的学习,大家已经掌握了Git的基本原理,接下里的博客中将为大家讲解 Git 的各种使用方法

相关推荐
雁于飞9 小时前
vscode中使用git、githup的基操
笔记·git·vscode·学习·elasticsearch·gitee·github
小毛驴85019 小时前
所有微服务部署都使用一个git地址,并且通过docker部署各个服务的情况下,如何编写mvn指令来处理各个服务。
git·docker·微服务
国王不在家19 小时前
git 切换仓库后清理分支缓存
git
柯南二号1 天前
【Gitlab】Ubuntu 20.04服务器部署Gitlab
git·gitlab
phac1231 天前
git 如何直接拉去远程仓库的内容且忽略本地与远端不一致的commit
大数据·git·elasticsearch
ficker131 天前
git常用命令
git
kevin_cat2 天前
微信群机器人-备份文件发送通知
git·bash·企业微信
程序媛Dev2 天前
50.4k Star!我用这个神器,在五分钟内搭建了一个私有 Git 服务器!
运维·服务器·git
澈轩2 天前
Git 用得好,下班走得早
git
人间造梦工厂2 天前
Git Bash 别名
git