Git 的核心设计之一,就是将代码变更的管理划分为三个清晰的区域:工作区(Working Directory)→ 暂存区(Staging Area)→ 本地仓库(Local Repository) 。
1. 工作区(Working Directory)
是什么?
你本地电脑上能直接看到、编辑的项目文件夹(包含所有源码、文档、子目录等)。这是你日常写代码、改配置、加注释的地方。
路径示例:
/Users/you/project/------ 除了隐藏的.git文件夹外,其余都是工作区。
特点
-
所有文件都处于 "当前开发状态" ,无论是否被 Git 跟踪。
-
文件按 Git 视角分为两类状态:
-
未跟踪(Untracked) :新创建的文件,Git 从未记录过(如刚新建的
readme.md)。 -
已跟踪(Tracked)
:曾被 git add 过,Git 有其历史记录。这类文件又可分为:
- 未修改(Unmodified)
- 已修改(Modified)
- 已暂存(Staged)
-
注意:工作区的任何修改不会自动进入版本历史,必须通过
git add显式告知 Git 哪些改动需要关注。
举例:
你的书桌------上面摊着草稿纸、涂改的段落、新写的章节......杂乱但充满创造力,尚未决定哪些内容要正式归档。
2.暂存区(Staging Area / Index)
是什么?
一个由 Git 内部维护的临时缓冲区 ,物理上存储在 .git/index 文件中(你看不到具体文件,但可通过命令操作)。 它是工作区与本地仓库之间的"中转站" ,用于预览和筛选即将提交的内容。
怎么进?
使用 git add <file> 或 git add . 将工作区的修改(包括新增文件)加入暂存区。
特点
-
只有通过
git add,修改才会进入暂存区。 -
可以多次执行
git add,逐步构建一次提交的内容:csharpgit add feature.c # 先暂存功能代码 git add README.md # 再暂存文档更新 -
如果对已暂存的文件再次修改,新改动会留在工作区,不会自动进入暂存区,需重新
git add才能包含。
这使得你可以把"修复 bug"和"添加新功能"拆成两次独立提交,哪怕它们是在同一个文件里完成的!
举例:
你的待寄包裹台------从书桌上挑选出几页满意的稿子,放进一个信封(暂存区),准备寄出。其他未选中的内容,仍留在桌上继续打磨。
3.本地仓库(Local Repository)
是什么?
位于项目根目录下的 .git 隐藏文件夹,其中存储了项目的完整历史快照,包括:
- 所有提交(commits)
- 分支(branches)
- 标签(tags)
- 配置信息等
.git目录就是 Git 的"大脑",删除它就等于把项目变回普通文件夹(失去所有版本控制能力)。
怎么进?
执行 git commit -m "提交信息",将暂存区的全部内容一次性打包,生成一个新的提交(commit),永久保存到本地仓库。
特点
- 每次
commit会生成一个唯一的 SHA-1 哈希值(如a3f2d1b...),作为该版本的身份证。 - 提交后,工作区和暂存区会"清空"(相对于这次提交而言),你可以继续开发。
- 即使你误删了工作区所有文件,只要本地仓库存在,就能通过
git checkout或git restore完整恢复!
举例:
你的个人档案馆------每次寄出的信
如图所示:

三大区域的数据流向
css
[ 工作区 ]
│
│ git add
▼
[ 暂存区 ]
│
│ git commit
▼
[ 本地仓库 ]
│
│ git push
▼
[ 远程仓库 ] (如 GitHub / GitLab)
git add:从工作区 → 暂存区git commit:从暂存区 → 本地仓库git commit不会提交工作区中未暂存的修改!