Git 工作区、暂存区和版本库

Git 的三个核心区域:工作区(Working Directory)暂存区(Staging Area / Index)版本库(Repository) 是理解 Git 工作流程的基础。下面用最清晰的方式帮你理清楚它们的概念、作用和关系。

1. 工作区(Working Directory)

  • 就是你电脑上能看到的项目文件夹,也就是你编辑文件的地方。
  • 所有你用编辑器打开、修改、增删的文件,都发生在工作区。
  • 状态:文件可能是 已修改(modified)新建但未 git add已删除 等。
  • 简单说:你敲代码的地方就是工作区。

2. 暂存区(Staging Area / Index)

  • 一个中间层,位于 .git 目录下的 index 文件(实际上是一个二进制文件)。
  • 作用:让你选择"下次要提交哪些改动"。
  • 通过 git add <文件> 把工作区的改动放入暂存区。
  • 暂存区可以理解为"提交的预览区"或"购物车":
    • 你可以只 add 部分文件
    • 可以 add 多次,暂存区会不断更新
    • 可以 git reset HEAD <文件> 把暂存区的东西拿出来(不影响工作区)
  • 状态查询:git status 中显示的 "Changes to be committed" 就是暂存区的内容。

3. 版本库(Repository)

  • 位于项目根目录下的 .git 文件夹(隐藏)。
  • 存放所有提交(commit)的历史记录、分支、标签等。
  • 每次执行 git commit 时:
    • Git 会把当前暂存区的内容打包成一个 commit 对象
    • 存入版本库(.git/objects)
    • 更新当前分支指针(通常是 HEAD → master/main)
  • 状态查询:git log 看到的提交历史就是版本库里的内容。

三者关系图(经典图解)

复制代码
工作区 (Working Directory)
    ↑↓ git add
暂存区 (Staging Area / Index)
    ↑↓ git commit
版本库 (Repository,包含 .git 目录)

实际操作流程示例

bash 复制代码
# 1. 修改了 a.txt 和 b.txt
git status
# → 显示 a.txt modified, b.txt modified(都在工作区)

# 2. 只想提交 a.txt 的改动
git add a.txt
git status
# → a.txt 在 "Changes to be committed"(暂存区)
# → b.txt 还在 "Changes not staged for commit"(工作区)

# 3. 提交
git commit -m "只修改了 a.txt"
# → 暂存区内容被提交到版本库,暂存区被清空

# 4. 再把 b.txt 加进来提交
git add b.txt
git commit -m "修改 b.txt"

常用命令与三个区域的关系总结

命令 影响的区域 说明
git add 工作区 → 暂存区 把改动放入暂存区
git commit 暂存区 → 版本库 把暂存区内容生成新 commit
git checkout -- 版本库 → 工作区 用版本库的版本覆盖工作区(丢弃工作区改动)
git reset HEAD 暂存区 → 工作区 取消暂存(暂存区改动退回到工作区)
git reset --hard 版本库 → 工作区 + 暂存区 强制重置到某个 commit,所有改动丢失
git restore 版本库 → 工作区(新命令) 丢弃工作区改动
git restore --staged 暂存区 → 工作区(新命令) 取消暂存

一句话总结区别

掌握了这三个区域,你就真正理解了 Git 的核心工作机制,后续学习 rebase、cherry-pick、stash 等高级操作也会轻松很多。

相关推荐
百结2141 天前
Mysql数据库操作
数据库·mysql·oracle
keep one's resolveY1 天前
时区问题解决
数据库
Leinwin1 天前
OpenClaw 多 Agent 协作框架的并发限制与企业化规避方案痛点直击
java·运维·数据库
qq_417695051 天前
机器学习与人工智能
jvm·数据库·python
漫随流水1 天前
旅游推荐系统(view.py)
前端·数据库·python·旅游
ego.iblacat1 天前
MySQL 服务基础
数据库·mysql
如意.7591 天前
【Linux开发工具实战】Git、GDB与CGDB从入门到精通
linux·运维·git
Maverick061 天前
Oracle Redo 日志操作手册
数据库·oracle
攒了一袋星辰1 天前
高并发强一致性顺序号生成系统 -- SequenceGenerator
java·数据库·mysql
W.D.小糊涂1 天前
gpu服务器安装windows+ubuntu24.04双系统
c语言·开发语言·数据库