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 checkoutgit restore 完整恢复!

举例:

你的个人档案馆------每次寄出的信

如图所示:

三大区域的数据流向

css 复制代码
[ 工作区 ] 
   │
   │ git add
   ▼
[ 暂存区 ] 
   │
   │ git commit
   ▼
[ 本地仓库 ]
   │
   │ git push
   ▼
[ 远程仓库 ] (如 GitHub / GitLab)
  • git add:从工作区 → 暂存区
  • git commit:从暂存区 → 本地仓库
  • git commit 不会提交工作区中未暂存的修改!
相关推荐
摇滚侠3 小时前
零基础小白自学 Git_Github 教程,分支合并,笔记13
笔记·git·github
young3 小时前
Git分支回退到指定提交点
git
悟能不能悟3 小时前
在TypeScript中 const xxx=(xx:any)=>{}为什么要加any
linux·git·typescript
系夏普3 小时前
重新学习 Git:从版本控制系统说起
git
第七种黄昏4 小时前
零开始git使用教程-传html文件
git
一笑code5 小时前
git常用命令
大数据·git·elasticsearch
弘毅 失败的 mian5 小时前
Git 基本操作
大数据·经验分享·笔记·git·elasticsearch
wang6021252186 小时前
Git相关操作
git
点亮~黑夜8 小时前
git详细使用教程
大数据·git·elasticsearch