一次讲清 Git 的三棵树:工作区、暂存区与版本库
【摘要】 很多人第一次学 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 的越界问题"
五、为什么要有暂存区?
- 拆分提交:一次工作区改了 5 个文件,可以只 add 其中 2 个先提交,剩下 3 个下次再提交,提交历史更清晰。
- 提交前检查:git diff --cached 让你在真正提交前最后看一眼,避免把调试代码带进版本库。
- 部分提交:用 git add -p 还能把同一个文件里的不同改动拆成多次提交。
六、常用命令速查
| 想看什么 | 命令 |
|---|---|
| 工作区改了什么 | git status / git diff |
| 暂存区里有什么 | git diff --cached |
| 撤销工作区修改 | git checkout – 文件名 |
| 把文件移出暂存区 | git reset HEAD 文件名 |
理解了三棵树的关系,add、commit、reset、checkout 这些命令就不再是死记硬背,而是水到渠成的操作。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)