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

相关推荐
知识分享小能手2 分钟前
Oracle 19c入门学习教程,从入门到精通,Oracle 的闪回技术 — 语法知识点与使用方法详解(19)
数据库·学习·oracle
踢足球092910 分钟前
寒假打卡:2026-01-31
数据库·sql
是小崔啊11 分钟前
PostgreSQL快速入门
数据库·postgresql
xxxmine18 分钟前
Redis 持久化详解:RDB、AOF 与混合模式
数据库·redis·缓存
yufuu9822 分钟前
使用Scikit-learn进行机器学习模型评估
jvm·数据库·python
MMME~26 分钟前
Ansible模块速查指南:高效定位与实战技巧
大数据·运维·数据库
甘露s42 分钟前
深入理解 Redis:事务、持久化与过期策略全解析
数据库·redis
珠海西格1 小时前
远动通信装置为何是电网安全运行的“神经中枢”?
大数据·服务器·网络·数据库·分布式·安全·区块链
小宇的天下1 小时前
Calibre 3Dstack --每日一个命令day18【floating_trace】(3-18)
服务器·前端·数据库
星空露珠1 小时前
速算24点检测生成核心lua
开发语言·数据库·算法·游戏·lua