Git | Git 版本控制 —— 工作区 & 暂存区 & 版本库

🌟想了解这个工具的其它相关笔记?看看这个:[网安工具] 版本控制系统 —— Git · 使用手册

在上一章中,我们提到了 “本地版本仓库” 的概念,又讲解了 git addgit commit 命令,为了让小伙伴更加清楚的理解到这两个命令所做的事,所以本章,笔者将向你介绍一下 Git 文件管理的逻辑结构。

本地 Git 仓库主要由两个大部分构成(后续会引入 GitHub,就又复杂一点了):

  1. 工作区:你当前正在工作的地方

  2. 版本库:你保存历史修改的地方

0x01:Git 文件管理 — 工作区(Working Tree)

首先是 “工作区”,记得我们上一章我们 commit 后查看 Git 仓库状态时的回显吗:

它跟我们说 “working tree clean”,这里的 working tree 指代的就是工作区。工作区本质上就是你创建的那一个 Git 仓库文件夹,比如我们上一章创建的 gitTest 文件夹:

0x0101:工作区(Working)— 解析

第一个问题是,为啥它叫 “工作区”,这个比较好理解,你想,你后续针对这个项目的开发是不是都是在这个文件夹中进行的?那你说这个文件夹是不是就是你的 “工作” 的地方嘛。

0x0102:树(Tree) — 解析

我们看到 Git 的提示中是说 “working tree”,那么 working 解析了,tree 呢?这其实体现了目录结构,即你的目录结构就是树型的,通过下面这个命令可以进行查看:

tree -a # -a 代表以树型结构展示所有文件,去掉 -a 会忽略掉以 . 开头的隐藏文件

如上,通过 tree 命令查看你的目录结构,是不是就是一个横过来的树型?这就是 “working tree” 名称的由来。

0x02:Git 文件管理 — 版本库(Repository)

我们上一章介绍到,如果你想让一个普通文件夹,变成 Git 版本仓库,你需要通过 git init 这个命令,来将此文件夹声明为 Git 版本仓库。而声明后最大的变化,就是该文件夹中会多一个 .git 文件夹。

.git 文件夹中的 . 代表这其实是个隐藏文件,你不细看它其实是不做展示的:

这个隐藏的 .git 文件夹,它其实就是我们 Git 的版本库。Git 的版本库中存放了很多东西,其中最重要的就是被称为 stage(或者叫 index)的暂存区,还有 Git 为我们自动创建的第一个分支 master,以及指向 master 的一个指针叫 HEAD

前面我们讲解了将文件往 Git 版本库里添加的时候,是分两步执行的:

  1. 通过 git add 将文件添加到进 Git 版本库中,这时实际上就是把文件修改添加到暂存区。

  2. 通过 git commit 提交更改,这里实际上就是把暂存区的所有内容提交到当前分支中。

我们在创建 Git 版本库时,Git 会自动为我们创建一个 master (主)分支,所以,现在我们 git commit 提交的分支,其实就是这个 master 分支(关于分支和 HEAD 的概念我们会在往后的章节中讲解,这是 Git 另一大优势)。

0x0201:工作区 => 暂存区 — Git ADD 流程解析

接下来,笔者以命令,结合图的形式,带你走一遍 Git 管理文件的流程。首先,我们先通过 git status 命令查看当前 Git 仓库中的状态:

如上,目前显示我们的工作区是干净的,此时我们修改一下 GitStudyLog.txt 中的内容,添加上一行内容:

[2025/04/26]    学习内容: Git 备注: 今天我要掌握 “工作区 & 版本库以及暂存区之间的关系!!!”

顺带,我们再创建一个叫 py_script 的文件夹,并在里面创建一个 Calculator.py 内容如下(带你写个 Python 小脚本):

def add(num1, num2):
    return int(num1) + int(num2)
​
if __name__ == "__main__":
    num1 = input("请输入第一个数: ");
    num2 = input("请输入第二个数: ");
    
    # 进行加法运算
    print(f"{num1} + {num2} = {add(num1, num2)}")

此时,我们的 Git 仓库中的目录结构如下(gitTest 下有一个文件和一个文件夹,py_script 文件夹中有一个 Calculator.py 文件):

此时,我们再用 git status 命令查看一下 Git 仓库的状态:

如上 git status 非常清楚的告诉我们,GitStudyLog.txt 被更改了,而 py_script 从未被添加到版本仓库中,所以状态为 Untracked

现在,我们通过下面的命令,先将 GitStudyLog.txt 和 py_scripty 文件夹都添加进 “暂存区” 后再来看看 Git 仓库的状态:

git add GitStudyLog.txt
git add py_script/

如上,两个文件都变绿了,证明我们成功将两个文件都添加到了暂存区,此时 Git 仓库的状态变成了下面这样:

从上图可以看出,git add 命令就是把要提交的所有修改都先存放到暂存区(Stage),而此时,正真的版本库中保存的,其实还是上一版我们提交的 GitStudyLog.txt 中的内容(见上一章)。

0x0202:暂存区 => master 分支 — Git Commit 流程解析

Git Commit 就比较简单了,就是将我们暂存区的所有修改,直接提交到分支(因为当前仅有一个分支,那提交的目标自然就是 master 分支):

git commit -m "2025/04/26 - GitStudy - 今天学习了 Git 工作区 & 版本库,顺带写了一个 Calculator.py"  

一旦提交后,如果你又没有对工作区做任何修改,那么你的工作区就是干净的:

此时,你的 Git 仓库就变成了下面这样,暂存区就没有任何内容了,Git 版本库也记录下了你今天的修改内容:

0x03:Git 文件管理 — 本章小结

暂存区是 Git 非常重要的一个概念,弄明白了暂存区,你就能够知道 Git 的很多操作到底干了什么。如果你还是有点云里雾里,建议回滚开头,重新跟着试验再做一遍。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Blue17 :: Hack3rX

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值