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

相关推荐
XDHCOM1 分钟前
ORA-12169: TNS连接标识符过长,Oracle报错故障修复与远程处理
数据库·oracle
爬山算法19 分钟前
MongoDB(86)如何使用MongoDB存储大文件?
数据库·mongodb
xcLeigh26 分钟前
KES数据库表空间目录自动创建特性详解与存储运维最佳实践
大数据·运维·服务器·数据库·表空间·存储
小陈工28 分钟前
2026年4月8日技术资讯洞察:边缘AI推理框架竞争白热化,Python后端开发者的机遇与挑战
开发语言·数据库·人工智能·python·微服务·回归
wb18935 分钟前
NoSQL数据库Redis集群重习
数据库·redis·笔记·云计算·nosql
许杰小刀35 分钟前
MyBatis-Plus实战:Spring Boot数据库操作效率提升10倍
数据库·spring boot·mybatis
Navicat中国37 分钟前
Navicat 结构同步:一键解决多库结构不一致难题
数据库·navicat·结构同步
薿夜1 小时前
SpringSecurity(二)
数据库
Francek Chen1 小时前
【大数据存储与管理】NoSQL数据库:01 NoSQL简介
大数据·数据库·分布式·nosql
Database_Cool_2 小时前
【无标题】
数据库·阿里云·ai