Git篇(2):文件的三个区域——工作区、暂存区与本地仓库

为什么需要"三个区域"?

如果你只用过一些网盘/版本控制工具,可能觉得"保存"就够了,为什么 Git 要搞三个区域?

这和开发者的实际需求有关:

  • 我可能只想提交部分文件,不是全部。
  • 我可能要分阶段保存修改,而不是"一锅端"。
  • 我可能想临时修改,但不一定要提交。

所以 Git 设计了一个"三步走"的模型:

👉 工作区 → 暂存区 → 仓库

这样就能灵活控制"哪些改动"进入历史。


三个区域的定义

1. 工作区(Working Directory)

  • 就是你电脑上能看到、能编辑的目录。
  • 文件在这里是"自由状态",你可以随便改。
  • 但是此时的改动,Git 并不知道。

2. 暂存区(Stage/Index)

  • 可以理解为"候选区"或者"快照清单"。
  • 当你执行 git add file 时,Git 会把 工作区的改动放进暂存区。
  • 暂存区决定了下一次提交的内容

3. 本地仓库(Repository,.git/objects)

  • 就是 Git 的数据库,隐藏在 .git 文件夹里。
  • 每次 git commit,Git 会把暂存区内容打包成一个快照,写进仓库。
  • 这才是真正的"历史记录"。

三个区域的关系

你可以把它类比成写书流程:

  • 工作区 = 草稿纸(你随便写)
  • 暂存区 = 出版社清单(你决定哪些草稿要出版)
  • 仓库 = 印刷好的书(成为历史,不能轻易改)

流程:

scss 复制代码
工作区 (改动) 
   │ git add
   ▼
暂存区 (候选提交)
   │ git commit
   ▼
本地仓库 (提交历史)

命令和状态

1. git status

查看三个区域的区别,常见状态:

  • Untracked(未跟踪):文件只在工作区。
  • Modified(已修改):文件被改动,但没放进暂存区。
  • Staged(已暂存):改动放在暂存区,等待提交。
  • Committed:改动已经进入仓库。

2. 举例演示

假设有个文件 a.txt

  1. 编辑文件(只在工作区)
bash 复制代码
echo "hello" >> a.txt
git status
# a.txt: modified
  1. 加入暂存区
csharp 复制代码
git add a.txt
git status
# a.txt: staged
  1. 提交到仓库
sql 复制代码
git commit -m "add hello"
git status
# nothing to commit, working tree clean

常见问题与误解

  1. 是不是每次修改都要 commit?
    不是!你可以多次 git add,最后一次 commit 一起保存。
  2. 我修改了文件,还没 add,就 commit 会怎样?
    没用!提交不会包含未加入暂存区的修改。
  3. 我 add 之后又改了文件,会怎样?
  • 暂存区保存的是 add 那一刻的快照。
  • 如果你之后又改了文件,工作区和暂存区就不一致了。
  • 需要再次 git add 才能把新的修改放进提交。

总结

  • 工作区:你改文件的地方。
  • 暂存区:下一次提交的候选清单。
  • 仓库:已经存档的历史快照。
  • 核心理解:git add = 放进候选清单,git commit = 真正写进历史。
相关推荐
ShineWinsu16 小时前
对于Git:远程操作的超详细保姆级解析
linux·git·gitee·github·远程仓库·分布式版本控制系统·远程操作
梦帮科技17 小时前
从 Guest 到 Platinum:Prompt 配额、API Key 与访问控制的安全闭环
javascript·git·架构·node.js·reactjs·html5·visual studio
zho_uzhou1 天前
Git入门概念
git
爱奥尼欧2 天前
【Git】远程分支删了本地还在、两个分支历史不相干?两招故障排解
开发语言·git
Java后端的Ai之路2 天前
Git冲突完整排查与实战:本地修改覆盖报错到成功推送全流程复盘
开发语言·人工智能·git·python·pop
一个心烑2 天前
配置项目git的 SSL 证书
git·网络协议·ssl
IT从业者张某某2 天前
【鸿蒙PC命令行适配】GitUI 移植的工程实践:双 Git 引擎(libgit2/gitoxide)的鸿蒙适配之路
git·华为·harmonyos
xinjia_ctrl2 天前
暑假实习总结
git·后端·spring·maven·intellij-idea
Molesidy2 天前
【Git】分别给出添加到Keil工程和IAR工程中的gitnore文件以便不跟踪编译文件的git记录
git·vscode·插件
颜颜yan_3 天前
Git Cola 鸿蒙 PC 版适配全记录:从 Qt 桌面工具到 ArkTS 原生应用
git·qt·harmonyos