图解Git工作区、暂存区、版本库之间的关系

本文深入浅出地解释了Git中的工作区、暂存区和版本库三个核心概念,通过实例演示了它们之间的交互过程,适合初学者理解Git的基本工作流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

声明:码字不易,转载请注明出处,欢迎文章下方讨论交流。

注:本文适合初学者和对git三分熟以下的读者

工作区、暂存区、版本库概念

拿自己亲身经历来说,初次接触git的时候最让人迷惑的无非是这三者的概念和他们之间的关系,搞懂这三个概念和他们之间的关系,可以说你对git了解已经三分熟了。本文是笔者使用git一年多后对一些基本概念的个人理解,写在这一方面给为初学者扫盲,同时也总结一下。

先上图,请务必将此图深深印在脑海里:
工作区暂存区版本库

  • 工作区:用来编辑保存项目文件的地方,也是用户能直接操作到的地方。
  • 暂存区:保存了下次将提交的文件列表信息,一般在 Git 仓库目录中,是一个叫index的文件,通常多数说法还是叫暂存区域;
  • 版本库:也叫本地版本库,之所以说git 快,是因为它是分布式版本控制系统,大部分提交都是对本地仓库而言的,不依赖网络,最后一次会推送的到远程仓库。

关于远程仓库本文暂时不提,过几天再更。

下面通过例子来说明:

首先在e:/gittest/下使用git init将其初始化为一个git仓库,此时git为为我们生成一个隐藏文件夹.git,git的暂存区和版本库都被管理在这个隐藏文件夹中。特别强调,不要闲的没事修改这个隐藏文件夹下的内容,否则git版本控制会失灵,严重的话将会给项目造成重大损失。
在e:/gittest/下,除去隐藏文件夹之外的都叫工作区,就是用户可以编辑保存项目文件的地方,我们新建一个doc1.txt文件,并在写入一些信息。
图片描述

此时:工作区有一个doc1.txt的文件,暂存区是空的,版本库也是空的。
使用git add doc1.txt命令就将工作区中的文件添加到暂存区,此时暂存区有东西了,暂存区存放的就是即将要提交到版本库里的文件列表信息。
此时,用git status命令去查看状态,会发现git提示我们changes to be committed,这个changes是新的文件doc1.txt。
图片描述

接下来,我们在工作区创建一个doc2.txt,此时,工作区有两个文件doc1.txt和doc2.txt。再用git status查看会发现暂存区的doc1.txt待提交,同时因为工作区新建的doc2.txt没有被add到暂存区,git提示我们有一个untracked(未被追踪)的文件。
图片描述

我们先使用git commit将doc1.txt提交到版本库,再将doc2.txt添加到暂存区,再将doc1.txt增加一行内容,此时,工作区中的doc1和暂存区中的doc1已经有所区别了,暂存区中存放的是上一版本的doc1和doc2,版本库中只有doc1,因为doc2还没有被commit,再用git status查看,会发现git提示我们changes not staged for commit,意思是说doc1已经被修改了但还未添加到暂存区。事实上,git管理的是添加到暂存区里面的修改,包括增删改等等都算是可以跟踪的文件变动,也可以说git只管理我们变动的部分变动的我们才往暂存区提交,这也是git比其他版本系统设计优秀的一点。
图片描述

我们注意上图中,对于doc1的修改,git提示我们,要么git add去更新暂存区的内容以便后面commit到版本库,要么使用git check out将版本库中的doc1 检出到工作区discard changes(放弃修改)。

到这读者可以回到本文第一张图中仔细回味,并加以实验练习,相信很快能理解这工作区、暂存区、版本库之间的工作关系。

总结git基本的工作流程如下:

  1. 在工作目录中修改(此处修改包含了创建和删除)文件;
  2. 暂存文件,将文件add放入暂存区域;
  3. 提交更新,找到暂存区域的文件,将暂存区的文件commit到版本库;
  4. 如果工作区的文件改乱了(包括了误删、误改),想回到上一版本,就可以使用git checkout 命令将版本库中的文件检出到工作区将本次更改discard(覆盖)掉。

码字不易,如对您有帮助,欢迎点赞收藏打赏^_^

### Git 暂存区的概念 暂存区(Index 或 Staging Area)是 Git 中一个重要但容易被忽视的部分。当执行 `git commit` 时,Git 实际上是从暂存区获取数据并将其作为新的提交记录保存下来[^2]。 在实际操作中,每次修改工作区内的文件后,这些更改并不会立即进入版本库,而是先放置于暂存区内等待确认。只有经过显式的 `git add` 命令将特定文件或变更加入到暂存区之后,才能通过后续的 `git commit` 提交至本地仓库。 ### 如何使用暂存区 #### 添加文件到暂存区 要向暂存区添加文件,可以使用如下命令: ```bash git add <file> ``` 这会把指定文件从工作区复制一份副本放入暂存区,并标记为待提交状态。如果想要一次性添加所有已跟踪以及未跟踪的新文件,则可以直接运行: ```bash git add . ``` #### 查看暂存区的状态 为了查看哪些文件已经被添加到了暂存区,可利用以下指令获得详细的差异对比信息: ```bash git status ``` 此命令不仅能够展示处于不同阶段(即已暂存/未暂存)下的改动情况,还会提示如何继续处理这些变化。 #### 移除暂存区中的文件 如果不小心将某些不需要提交的内容加入了暂存区,可以通过下面的方式撤销这一行为而不影响原始文件: ```bash git restore --staged <file> ``` 上述命令将会移除给定路径对应的条目,使其恢复到仅存在于工作区而不在暂存区里的状况。 #### 完成提交过程 一旦准备好了一组完整的更新项,就可以准备正式提交了。此时只需简单调用: ```bash git commit -m "描述性的消息" ``` 这样就会把当前暂存区里所有的变动打包成一个新的提交对象存储进项目的历史记录之中。 ### 图解说明 根据参考资料,Git 的整体架构由多个部分组成,其中包括工作区暂存区本地仓库等组件。对于开发者而言,理解这三个核心概念之间关系至关重要,因为这是掌握 Git 流程的基础[^4]。 ![Git 结构](https://example.com/git_structure.png)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值