Git 核心概念
理解 Git 的五大区域和文件状态流转机制
#Git
#版本控制
#基础概念
Git 的核心在于理解五大区域和文件状态的流转。掌握这些概念是高效使用 Git 的基础。
Git 五大区域
工作区(Working Directory)编辑项目文件,修改首先发生在这里。
git status · git diff暂存区(Index / Stage)选择下一次提交要记录的内容。
git add · git diff --cached本地版本库(Local Repository)保存提交对象与本地版本历史。
git commit · git log远程版本库(Remote Repository)协作与共享提交历史。
git fetch · git push储藏区(Stash)临时收起未完成的修改,稍后恢复。
git stash · git stash pop工作区(Working Directory)
工作区是你在本地计算机上看到的项目文件目录。所有对文件的更改首先发生在工作区中。
文件状态
工作区中的文件可能处于以下几种状态:
| 状态 | 英文 | 含义 |
|---|---|---|
| 未跟踪 | Untracked | 新创建的文件,未被 Git 记录 |
| 已跟踪 | Tracked | 已被 Git 管理的文件 |
| 已修改 | Modified | 已跟踪的文件发生了更改,但未暂存 |
| 已暂存 | Staged | 修改已添加到暂存区,等待提交 |
| 已提交 | Committed | 暂存区内容已提交到版本库 |
状态流转图
Git 文件状态流转 图表加载后显示;也可展开查看下方源码。
查看 Mermaid 源码
flowchart LR accTitle: Git 文件状态流转 U["未跟踪"] -->|git add| S["已暂存"] S -->|git commit| C["已提交"] C -->|编辑文件| M["已修改"] M -->|git add| S
✨ 技巧
两组概念的区别
- 已跟踪 vs 未跟踪:回答的是「Git 认不认识这个文件?」(身份问题)
- 已暂存 vs 已修改:回答的是「这个文件的最新改动准备好提交了吗?」(进度问题)
暂存区(Index / Stage)
暂存区是一个临时存储区域,用于保存即将提交到本地仓库的更改。
# 将指定文件添加到暂存区
git add <filename>
# 将当前目录下所有更改添加到暂存区
git add .
暂存区的作用:允许你选择性地将工作目录中的更改添加到暂存区,这样可以一次提交多个文件的更改,而不必提交所有文件。
本地版本库(Local Repository)
本地版本库是一个隐藏在 .git 目录中的数据库,用于存储项目的所有提交历史记录。
# 将暂存区的更改提交到本地版本库
git commit -m "commit message"
💡 提示
版本库的分类
- 本地版本库:存储在
.git目录(隐藏文件夹)中,包含所有提交的对象和引用 - 远程版本库:存储在远程服务器上(如 GitHub、GitLab),用于团队协作和代码备份
远程版本库(Remote Repository)
远程版本库存储在远程服务器上,用于团队协作和代码备份。常见的远程仓库托管服务包括 GitHub、GitLab、Gitee 等。
# 将本地更改推送到远程版本库
git push origin <branch-name>
# 从远程版本库拉取更改
git pull origin <branch-name>
储藏区(Stash)
储藏区用于临时保存工作区和暂存区的更改,以便切换分支或处理其他任务。
# 储藏当前更改
git stash
# 恢复储藏的更改
git stash pop
五大区域的关系
Git 五大区域与常用操作 图表加载后显示;也可展开查看下方源码。
查看 Mermaid 源码
flowchart LR accTitle: Git 五大区域与常用操作 W["工作区"] -->|git add| I["暂存区"] I -->|git commit| L["本地版本库"] L -->|git push| R["远程版本库"] R -->|git fetch| L L -->|git switch / restore| W W -->|git stash| S["储藏区"] S -->|git stash pop / apply| W
git pull 会先 fetch,再把获取的提交通过 merge 或 rebase 整合到当前分支;它不只是复制远程仓库到本地。
相关笔记:
- 环境配置与仓库初始化 — Git 环境搭建和仓库创建
- 暂存与提交 — 暂存区和提交的详细操作