🌟想了解这个工具的其它相关笔记?看看这个:[网安工具] 版本控制系统 —— Git · 使用手册
在上一章中,我们提到了 “本地版本仓库” 的概念,又讲解了 git add
和 git commit
命令,为了让小伙伴更加清楚的理解到这两个命令所做的事,所以本章,笔者将向你介绍一下 Git 文件管理的逻辑结构。
本地 Git 仓库主要由两个大部分构成(后续会引入 GitHub,就又复杂一点了):
-
工作区:你当前正在工作的地方
-
版本库:你保存历史修改的地方
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 版本库里添加的时候,是分两步执行的:
-
通过
git add
将文件添加到进 Git 版本库中,这时实际上就是把文件修改添加到暂存区。 -
通过
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 的很多操作到底干了什么。如果你还是有点云里雾里,建议回滚开头,重新跟着试验再做一遍。