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 不会提交工作区中未暂存的修改!
相关推荐
AIMath~1 小时前
如何将一个新的文件夹使用git 工具提交到github新仓库中
git·github
满天星83035772 小时前
【Git】原理及使用(二) (版本回退)
linux·git
愿天垂怜2 小时前
【C++脚手架】ffmpeg 库的介绍与使用
linux·服务器·开发语言·c++·ide·git·ffmpeg
月夜的风吹雨2 小时前
Linux 基础开发工具详解:从 yum 到 gdb 实战指南
linux·git·ubuntu·centos·vim
好运yoo3 小时前
git cherry-pick
git
不是光头 强3 小时前
Obsidian Git 插件安装与配置完全指南
git
.千余4 小时前
【C++】C++核心语法:函数重载与缺省参数原理与避坑
c语言·开发语言·c++·经验分享·笔记·git·学习
meowrain4 小时前
Git HTTPS Token 凭据配置指南
git·网络协议·https
Ws_16 小时前
Git + Gerrit 第二课:diff、暂存区与撤销修改
git
snowjlz16 小时前
鸿蒙版SVN来了!!!
git·svn·版本控制