认识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 的各种使用方法

相关推荐
Violet_YSWY38 分钟前
git stash和backup一样吗
git
Crystal3285 小时前
Git 基础:生成版本、撤消操作、版本重置、忽略文件
前端·git·github
系夏普8 小时前
Git 版本库(Ubuntu 环境)
git
IT从业者张某某8 小时前
DAY3-Open Harmony PC 命令行适配指南(Windows版)-git Permission denied (publickey) 问题
git·open harmony
摇滚侠9 小时前
零基础小白自学 Git_Github 教程,git 命令行操作1,笔记18
笔记·git·github
无限进步_9 小时前
C++从入门到类和对象完全指南
开发语言·c++·windows·git·后端·github·visual studio
Violet_YSWY10 小时前
git删除某一提交
git
Violet_YSWY10 小时前
git变基
git
MUTA️11 小时前
git常用操作
git
古城小栈11 小时前
Git换行符解析:CRLF 与 LF 的区别及统一策略
git