Git 的三大工作区域:工作区、暂存区、本地仓库

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,逐步构建一次提交的内容:

    csharp 复制代码
    git 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 不会提交工作区中未暂存的修改!
相关推荐
驭渊的小故事15 小时前
linux 基础命令 + git 仓库创建和配置命令
linux·git
行者-全栈开发20 小时前
华为云码道 CodeArts 实测:让 AI 用 Rust 写一个 Git 仓库健康度体检台「仓衡」
git·rust·tauri·桌面应用·ai 编程·华为云码道·codearts 代码智能体
挖掘狂人3 天前
Git 从 0 到 1:用一个小项目走完 add / commit / reset / merge / rebase / push
git·后端·github
codigger3 天前
Git 三区域模型:把 add、commit、reset、merge 一次讲透
git·github·编程·编程语言
水饺编程3 天前
第1章:开发环境搭建,在 Windows 中安装 Git
linux·c语言·汇编·git·ubuntu
idanzk3 天前
Git 推送 GitHub 报 SSL_READ /src refspec main 不匹配 完整踩坑记录
git·github·ssl
星恒随风3 天前
Linux开发工具详解(二):Git版本控制、GitHub协作与GDB调试实战
linux·笔记·git·学习·github
寺中人4 天前
Xshell 完全入门指南:从安装到实战,远程连接+文件传输+会话管理全拆解
git·ssh·github·php·远程连接·xshell·运维工具
酬谢神明则必安4 天前
git学习记录01
linux·git·学习
lingchen19064 天前
版本控制 Git源代码项目管理
git