首页 / Git 入门教程 / 工作区、暂存区与版本库

Git 入门教程

工作区、暂存区与版本库

本教程共 26 篇 · 第 4 篇 · 更新于 2026-07-29 · 约 7 分钟阅读

GitGit 入门教程工作区暂存区版本库三区模型文件状态

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 addgit commit 的各种用法。