一次讲清 Git 的三棵树:工作区、暂存区与版本库

举报
yd_261230726 发表于 2026/10/31 14:34:02 2026/10/31
【摘要】 很多人第一次学 Git 时最困惑的问题就是:改完文件为什么还要 git add 一下才能 commit?直接提交不行吗?要回答这个问题,得先认识 Git 的“三棵树”:工作区、暂存区与版本库。 一、工作区:你正在干活的地方工作区就是你电脑上能看到的项目文件夹。你用编辑器改的每一个文件,都发生在工作区里。工作区里的改动是“未跟踪”或“已修改但未提交”的状态——它们还没有正式进入 Git 的管理...

很多人第一次学 Git 时最困惑的问题就是:改完文件为什么还要 git add 一下才能 commit?直接提交不行吗?要回答这个问题,得先认识 Git 的“三棵树”:工作区、暂存区与版本库。

一、工作区:你正在干活的地方

工作区就是你电脑上能看到的项目文件夹。你用编辑器改的每一个文件,都发生在工作区里。工作区里的改动是“未跟踪”或“已修改但未提交”的状态——它们还没有正式进入 Git 的管理视野。

二、暂存区:commit 的“草稿箱”

执行 git add 之后,文件的当前快照就被放进了暂存区(也叫 index 或 stage)。暂存区是工作区与版本库之间的缓冲地带:

  • git diff 看到的是“工作区相对暂存区”的差异;
  • git diff --cached(或 --staged)看到的是“暂存区相对版本库”的差异;
  • git status 会分别告诉你这两处各有什么变化。

三、版本库:真正的时间线

执行 git commit 时,Git 会把暂存区里的快照打包成一次提交,存进版本库(HEAD 指向的分支)。从此这次快照有了编号(commit id),可以随时回退、对比、检出。

四、一次完整的协作流程

# 1. 在工作区修改文件
$ vim main.py

# 2. 查看状态:main.py 显示为“已修改”
$ git status

# 3. 把改动放进暂存区
$ git add main.py

# 4. 确认暂存内容正是你想要的
$ git diff --cached

# 5. 生成一次提交
$ git commit -m "修复 main.py 的越界问题"

五、为什么要有暂存区?

  1. 拆分提交:一次工作区改了 5 个文件,可以只 add 其中 2 个先提交,剩下 3 个下次再提交,提交历史更清晰。
  2. 提交前检查:git diff --cached 让你在真正提交前最后看一眼,避免把调试代码带进版本库。
  3. 部分提交:用 git add -p 还能把同一个文件里的不同改动拆成多次提交。

六、常用命令速查

想看什么 命令
工作区改了什么 git status / git diff
暂存区里有什么 git diff --cached
撤销工作区修改 git checkout – 文件名
把文件移出暂存区 git reset HEAD 文件名

理解了三棵树的关系,add、commit、reset、checkout 这些命令就不再是死记硬背,而是水到渠成的操作。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。