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

相关推荐
霸道流氓气质21 小时前
CodeBuddy中使用 MCP 工具将 XMind 思维导图转换为 Markdown —— 实操流程汇总
git·myeclipse·xmind
OsDepK1 天前
mimo code安装教程
git·电脑·ai编程
NexTunnel1 天前
公司老项目还在 SVN,远程维护怎么做更稳?
git·svn·gitlab·远程工作·nextunnel
满天星83035772 天前
【Git】原理及使用(七) (多人协作 [下])
git
郡杰2 天前
Git基础与开发平台搭建
git·后端
钟智强2 天前
我警告了 329 天
git·php·wordpress·webshell
乐观的冷风2 天前
我们需要将文件添加到暂存区才能提交,而移除文件后是无法添加到暂存区的,那么怎么移除一个文件让GIT不再将其纳入版本控制呢?上图中GIT已经给出了说明:
git
tjl521314_212 天前
Git SSH Host Key Verification Failed 问题排查与解决
运维·git·ssh
嘶哈哈哈2 天前
[特殊字符] Git 协作指南
git
say_fall2 天前
【Git 精品详解】企业规范:企业级开发模型、Git Flow、发版流程规范、Code Owner 制度、事故应急回滚
大数据·linux·服务器·git·学习·elasticsearch