工作区、暂存区与版本库
本教程共 26 篇 · 第 4 篇 · 更新于 2026-07-29 · 约 7 分钟阅读
4. 工作区、暂存区与版本库
本节目标:理解 Git 三区模型,搞清楚文件从”改了”到”存好”中间经历了什么。
三个区域
Git 有三个核心区域,理解它们就理解了 Git 的大部分操作。
工作区(Working Directory):你在电脑里看到的目录。你在这里编辑文件。
暂存区(Staging Area):一个临时区域,存放”下次提交要包含的改动”。
版本库(Repository):.git 目录里的内容。存放所有已提交的快照和历史。
用购物车来类比
把暂存区想象成超市购物车。
你在货架上拿东西(工作区修改文件),放进购物车(git add 到暂存区),最后推去收银台结账(git commit 到版本库)。
购物车里的东西可以调整,不想要了可以拿出来。但一结账,就变成购物小票(提交记录),改不了了。
文件状态流转
一个文件在 Git 里的状态变化:
新建文件 → untracked(未跟踪)
git add → staged(已暂存)
git commit → committed(已提交,回到 unmodified)
修改文件 → modified(已修改,但未暂存)
画成图更清楚:
┌──────────┐ git add ┌──────────┐ git commit ┌──────────┐
│ 工作区 │ ────────→ │ 暂存区 │ ──────────→ │ 版本库 │
│ (modified)│ │ (staged) │ │(committed)│
└──────────┘ └──────────┘ └──────────┘
实际操作走一遍
假设仓库里有一个 readme.txt,内容如下:
Git is a version control system.
Git is free software.
现在你加了一行,变成:
Git is a version control system.
Git is free software.
Git is distributed.
此时文件处于 modified 状态。用 git status 看看:
git status
输出:
On branch main
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: readme.txt
Git 告诉你:readme.txt 改了,但还没暂存。
执行 git add:
git add readme.txt
再 git status:
On branch main
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
modified: readme.txt
现在文件在暂存区了。执行 git commit:
git commit -m "add distributed"
输出:
[main abc1234] add distributed
1 file changed, 1 insertion(+)
提交成功。此时工作区、暂存区、版本库三者内容一致,git status 显示干净:
On branch main
nothing to commit, working tree clean
Note
nothing to commit, working tree clean是 Git 在说:“三个区域都一样,没啥要处理的。“
暂存区的价值
你可能会问:为什么不直接从工作区提交到版本库,中间加个暂存区多麻烦?
因为暂存区让你精心挑选要提交的内容。比如你改了三个文件,但只想先提交其中两个。git add 选好的,git commit 一次搞定。
另一个场景:一个文件改了一半,另一半还没写完。你可以只 add 已完成的那部分(用 git add -p),把暂存区当成”提交草稿”。
这章学到了什么
- 三区模型:工作区 → 暂存区 → 版本库
- 文件状态:untracked → staged → committed
git add把改动放进暂存区,git commit把暂存区内容写入版本库- 暂存区的价值:精心挑选提交内容,支持多次 add 再一次 commit
下一章,我们详细讲 git add 和 git commit 的各种用法。