Git 的三个核心区域:工作区(Working Directory)、暂存区(Staging Area / Index)、版本库(Repository) 是理解 Git 工作流程的基础。下面用最清晰的方式帮你理清楚它们的概念、作用和关系。
1. 工作区(Working Directory)
- 就是你电脑上能看到的项目文件夹,也就是你编辑文件的地方。
- 所有你用编辑器打开、修改、增删的文件,都发生在工作区。
- 状态:文件可能是 已修改(modified)、新建但未 git add、已删除 等。
- 简单说:你敲代码的地方就是工作区。
2. 暂存区(Staging Area / Index)
- 一个中间层,位于
.git目录下的index文件(实际上是一个二进制文件)。 - 作用:让你选择“下次要提交哪些改动”。
- 通过
git add <文件>把工作区的改动放入暂存区。 - 暂存区可以理解为“提交的预览区”或“购物车”:
- 你可以只 add 部分文件
- 可以 add 多次,暂存区会不断更新
- 可以
git reset HEAD <文件>把暂存区的东西拿出来(不影响工作区) - 状态查询:
git status中显示的 “Changes to be committed” 就是暂存区的内容。
3. 版本库(Repository)
- 位于项目根目录下的
.git文件夹(隐藏)。 - 存放所有提交(commit)的历史记录、分支、标签等。
- 每次执行
git commit时: - Git 会把当前暂存区的内容打包成一个 commit 对象
- 存入版本库(.git/objects)
- 更新当前分支指针(通常是 HEAD → master/main)
- 状态查询:
git log看到的提交历史就是版本库里的内容。
三者关系图(经典图解)
工作区 (Working Directory)
↑↓ git add
暂存区 (Staging Area / Index)
↑↓ git commit
版本库 (Repository,包含 .git 目录)
实际操作流程示例
# 1. 修改了 a.txt 和 b.txt
git status
# → 显示 a.txt modified, b.txt modified(都在工作区)
# 2. 只想提交 a.txt 的改动
git add a.txt
git status
# → a.txt 在 “Changes to be committed”(暂存区)
# → b.txt 还在 “Changes not staged for commit”(工作区)
# 3. 提交
git commit -m "只修改了 a.txt"
# → 暂存区内容被提交到版本库,暂存区被清空
# 4. 再把 b.txt 加进来提交
git add b.txt
git commit -m "修改 b.txt"
常用命令与三个区域的关系总结
| 命令 | 影响的区域 | 说明 |
|---|---|---|
| git add | 工作区 → 暂存区 | 把改动放入暂存区 |
| git commit | 暂存区 → 版本库 | 把暂存区内容生成新 commit |
| git checkout — | 版本库 → 工作区 | 用版本库的版本覆盖工作区(丢弃工作区改动) |
| git reset HEAD | 暂存区 → 工作区 | 取消暂存(暂存区改动退回到工作区) |
| git reset –hard | 版本库 → 工作区 + 暂存区 | 强制重置到某个 commit,所有改动丢失 |
| git restore | 版本库 → 工作区(新命令) | 丢弃工作区改动 |
| git restore –staged | 暂存区 → 工作区(新命令) | 取消暂存 |
一句话总结区别
- 工作区:你当前看到的、正在编辑的文件
- 暂存区:一个“准备提交的快照”,让你灵活选择提交内容
- 版本库:所有历史提交的永久存储地
掌握了这三个区域,你就真正理解了 Git 的核心工作机制,后续学习 rebase、cherry-pick、stash 等高级操作也会轻松很多。