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 不会提交工作区中未暂存的修改!
相关推荐
stevenzqzq1 天前
git 常用操作
大数据·git
Curvatureflight1 天前
Git工作流最佳实践:从混乱到优雅
git
wu~9701 天前
GitHub永不遗忘,使用git push -f来覆盖的提交依旧保留
git·github
Vermouth_001 天前
git clone的时候提示access denied
git
qq_437657271 天前
清楚本地的git并重新登录
git
jiang_changsheng1 天前
工作流agent汇总分析 2
java·人工智能·git·python·机器学习·github·语音识别
顶点多余1 天前
版本控制器-git
linux·git
夔曦1 天前
Git工程日常下拉/上传完整流程(自用)
git
岱宗夫up1 天前
GitHub Desktop如何设置中文?这不是个简单问题
git·github
岱宗夫up1 天前
.env 文件是干啥的?为什么不能提交到 Git?
大数据·git·elasticsearch·搜索引擎·gitee·github·gitcode