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 等高级操作也会轻松很多。

相关推荐
SelectDB40 分钟前
Apache Doris Python UDF:让 SQL 直接调用 Python 生态,支撑 Agent 时代复杂业务逻辑
大数据·数据库·python
A_Lonely_Cat8 小时前
记一次 GitHub 幽灵协作者大清洗:强制重写 Git 历史与穿透 CDN 缓存实践
git·github
jiayou641 天前
KingbaseES 表级与列级加密完全指南
数据库·后端
GBASE2 天前
G术时刻 |GBase 8s数据库事务并发控制之封锁技术介绍(下)
数据库
和你看星星2 天前
Git rerere:让重复冲突只解决一次
git
xiezhr2 天前
逛GitHub发现了一款免费的带AI功能的数据库管理工具
数据库·ai编程·dba
吃糖的小孩3 天前
给 QQ AI 机器人设计“可控记忆”:会话摘要、手动长期记忆与角色卡边界
数据库
笃行3504 天前
金仓数据库数据安全双防线:静态存储加密与传输加密实战
数据库
笃行3504 天前
金仓数据库物理备份实战:sys_rman 全流程演练与误覆盖抢救
数据库
笃行3504 天前
金仓数据库逻辑备份实战:从全库导出到 Schema 替换的完整闭环
数据库