Git三个主要区域介绍(工作区Working Directory、暂存区Index/Staging Area、仓库区Repository)

文章目录

Git 三个主要区域详解:Working Directory、Staging Area、Repository

Git 之所以强大,很大程度上来源于它清晰的"三区模型"。

很多刚接触 Git 的开发者,经常会疑惑:

  • 为什么 git add 之后还要 git commit
  • 为什么文件修改后状态会变化
  • 为什么有时候代码"已经保存了"但却"没有提交"

本质原因,就是没有真正理解 Git 的三个主要区域。

本文将系统介绍:

  • Git 三个区域分别是什么
  • 它们之间如何流转
  • 常见命令如何影响区域
  • 为什么 Git 要这样设计

一、Git 的三个主要区域

Git 工作流中,最核心的三个区域:

text 复制代码
Working Directory
        ↓ git add
Staging Area
        ↓ git commit
Repository

分别是:

区域 中文 作用
Working Directory 工作区 你正在修改的文件
Staging Area 暂存区 准备提交的内容
Repository 仓库区 Git 已保存的历史版本

可以把它理解成:

text 复制代码
你正在写代码
    ↓
你挑选准备提交的代码
    ↓
Git永久保存版本

二、Working Directory(工作区)

什么是工作区

工作区就是:

你当前电脑里真实可见的项目目录

例如:

text 复制代码
my-project/
├── app.py
├── README.md
└── requirements.txt

你在 IDE 中修改文件:

python 复制代码
print("hello")

这些修改都发生在:

text 复制代码
Working Directory

工作区特点

工作区中的内容:

  • 可以随意修改
  • 可以删除
  • 可以新增
  • Git 尚未正式记录

此时 Git 只是知道:

text 复制代码
"你改了东西"

但还没有进入版本历史。


查看工作区状态

使用:

bash 复制代码
git status

例如:

bash 复制代码
modified: app.py

说明:

text 复制代码
工作区发生了修改

三、Staging Area(暂存区)

什么是暂存区

暂存区(Stage / Index)是:

一个"提交候选区"

它的作用:

text 复制代码
决定哪些修改会进入下一次 commit

为什么需要暂存区

这是 Git 非常优秀的设计。

假设你修改了:

text 复制代码
app.py
README.md
test.py

但你只想提交:

text 复制代码
app.py

这时:

bash 复制代码
git add app.py

只有 app.py 会进入暂存区。

其他文件不会被提交。


git add 的本质

很多人误以为:

bash 复制代码
git add = 提交

其实不是。

真正含义是:

text 复制代码
把工作区修改放入暂存区

流程:

text 复制代码
Working Directory
        ↓ git add
Staging Area

查看暂存区状态

bash 复制代码
git status

示例:

bash 复制代码
Changes to be committed:
    modified: app.py

说明:

text 复制代码
app.py 已进入暂存区

暂存区的价值

暂存区允许你:


1. 分批提交

例如:

第一次提交:

bash 复制代码
git add login.py
git commit -m "feat: add login"

第二次提交:

bash 复制代码
git add payment.py
git commit -m "feat: add payment"

即使两个文件同时修改,也能拆分历史。


2. 保持 commit 干净

好的 commit 应该:

text 复制代码
一个 commit 只做一件事

暂存区让你可以精确控制。


3. 做代码 review 更容易

review 时:

text 复制代码
每个 commit 都是独立逻辑

而不是:

text 复制代码
"这一大堆改动到底干了啥"

四、Repository(仓库区)

什么是仓库区

仓库区:

text 复制代码
.git 目录中的版本数据库

这里保存:

  • commit 历史
  • branch
  • tag(给特定的commit打标签)
  • Git 对象
  • 版本快照

git commit 的本质

执行:

bash 复制代码
git commit -m "feat: add login"

本质:

text 复制代码
把暂存区内容保存到 Repository

流程:

text 复制代码
Working Directory
        ↓ git add
Staging Area
        ↓ git commit
Repository

commit 后会发生什么

Git 会:

  • 生成 commit SHA
  • 保存文件快照
  • 建立历史链
  • 更新当前 branch

例如:

bash 复制代码
a1b2c3d feat: add login

此时:

text 复制代码
代码正式进入版本历史

五、三区流转完整流程


1. 修改文件

bash 复制代码
vim app.py

进入:

text 复制代码
Working Directory

2. 添加到暂存区

bash 复制代码
git add app.py

进入:

text 复制代码
Staging Area

3. 提交到仓库

bash 复制代码
git commit -m "update app"

进入:

text 复制代码
Repository

六、三区结构图(非常重要)

text 复制代码
┌────────────────────┐
│  Working Directory │
│  (工作区)           │
└─────────┬──────────┘
          │ git add
          ▼
┌────────────────────┐
│   Staging Area     │
│   (暂存区)          │
└─────────┬──────────┘
          │ git commit
          ▼
┌────────────────────┐
│    Repository      │
│    (仓库区)         │
└────────────────────┘

七、常见命令对三区的影响

命令 作用
git add 工作区 → 暂存区
git commit 暂存区 → 仓库区
git restore 恢复工作区
git restore --staged 从暂存区撤回
git reset 回退 commit / 暂存区
git checkout 切换版本影响工作区
git diff 查看工作区差异
git diff --staged 查看暂存区差异

八、一个经典误区

很多新手:

bash 复制代码
git add .

之后认为:

text 复制代码
"已经提交了"

实际上只是:

text 复制代码
进入暂存区

真正进入 Git 历史的是:

bash 复制代码
git commit

九、为什么 Git 设计成三区

Git 之所以强于很多旧版 VCS:

就在于:

text 复制代码
它允许"提交前精确控制"

例如:

  • 只提交部分文件
  • 拆分 commit
  • 组织历史
  • 清晰 review
  • 管理大型修改

这都是暂存区带来的能力。


十、理解三区后,你会真正理解 Git

很多 Git 命令本质上都在:

text 复制代码
不同区域之间移动数据

例如:

命令 本质
git add 工作区 → 暂存区
git commit 暂存区 → 仓库
git reset 仓库 → 暂存区
git restore 暂存区 → 工作区
git checkout 仓库 → 工作区

理解这一点:

Git 会突然变得非常清晰。


十一、总结

Git 三个主要区域:

区域 作用
Working Directory 正在修改的文件
Staging Area 准备提交的内容
Repository 已保存历史版本

核心流转:

text 复制代码
工作区
  ↓ git add
暂存区
  ↓ git commit
仓库区

真正掌握 Git 的关键:

不是死记命令。

而是:

text 复制代码
理解数据在三区之间如何流动

当你理解这一点后:

  • reset
  • checkout
  • restore
  • rebase
  • cherry-pick

这些命令都会变得容易理解。

相关推荐
她说可以呀2 小时前
git在Ubuntu的下载和配置用户
git·ubuntu
隔窗听雨眠2 小时前
Git二分法精准定位Bug
git·bug·git bisect
weixin_704266053 小时前
IDEA 整合 Git 并上传代码到 CSDN GitCode 超详细教程
git·intellij-idea·gitcode
芝士就是力量啊 ೄ೨4 小时前
Git使用教程(如何使用VSCode+Git+Gitee对项目进行版本控制)
git·vscode·gitee
OYangxf4 小时前
Git工作流用法
git
___波子 Pro Max.16 小时前
Git Remote 仓库地址变更
git
ModestCoder_21 小时前
Git 忽略所有 `.xlsx`,但保留指定 Excel 文件的方法
git·excel
阡陌..1 天前
202605新版git_2.54.0常用操作指令
大数据·git·elasticsearch
会笑的小熊1 天前
VScode项目推送到git仓库
ide·git·vscode