git基本概念
工作区:仓库的目录。工作区是独立于各个分支的。
暂存区:数据暂时存放的区域,类似于工作区写入版本库前的缓存区。暂存区是独立于各个分支的。
版本库:存放所有已经提交到本地仓库的代码版本
版本结构:树结构,树中每个节点代表一个代码版本。
四大工作区域与流转
Git 的整体架构可以划分为本地三区 + 远程一区:
flowchart LR
A["工作区<br>Working Directory"] -->|"git add"| B["暂存区<br>Staging Area / Index"]
B -->|"git commit"| C["本地版本库<br>Repository (.git)"]
C -->|"git push"| D["远程仓库<br>Remote Repository"]
D -->|"git fetch / git pull"| C
C -->|"git checkout / git restore"| A
- 工作区:你正在编辑的项目目录,改动对 Git 而言是"未登记"的。
- 暂存区:
git add后改动进入暂存区,决定"下次 commit 带上哪些内容"——这是 Git 区别于很多 VCS 的设计,允许把一次大改动拆成多次精准提交。 - 本地版本库:
git commit后版本永久记录在.git目录中,形成树状历史。 - 远程仓库:托管在 GitHub / GitLab / Gitee 等平台,是团队协作的同步枢纽。
一次完整的日常循环:编辑(工作区)→ add(暂存区)→ commit(本地库)→ push(远程库);反向的 pull 则是"fetch + merge",把远程新版本拉下来合并进本地。
文件的三种状态(生命周期)
从文件视角看,一个文件在 Git 中处于三种状态之间流转:
| 状态 | 含义 | 进入方式 / 转移命令 |
|---|---|---|
| 已修改(Modified) | 工作区改了文件,还没放到暂存区 | 编辑文件;用 git restore 撤销 |
| 已暂存(Staged) | 已 git add,下次提交会包含它 |
git add;git restore --staged 退回 |
| 已提交(Committed) | 已安全存入本地版本库 | git commit |
另有一类特殊状态 Untracked(未跟踪):新建的文件还没被 git add 过,Git 对它"视而不见",不纳入版本管理。
本地仓库与远程仓库
- 本地仓库:项目目录下隐藏的
.git文件夹就是本地仓库本体,包含全部历史版本、暂存区、分支与配置信息——拷贝这个文件夹,整个仓库就带走了。 - 远程仓库:托管在网络上的仓库副本,本地通过
remote机制与之关联。约定俗成把第一个远程命名为 origin(git remote add origin <url>)。 - 协作模型:Git 是分布式版本控制——每个开发者本地都有完整仓库(含全部历史),远程仓库只是多人同步的"中转站",即使离线也能提交、查看历史、建分支,联网后再 push/pull 同步。
HEAD 与分支
- 提交(commit):版本树中的一个节点,记录了完整快照、作者、时间与指向上一个提交的指针。
- 分支:本质上是指向某个提交的可移动指针。默认主分支为
master(如今 GitHub 新仓库多用main)。创建分支只是创建一个指针,所以 Git 建分支几乎零成本。 - HEAD:指向"当前所在提交"的指针,通常指向当前分支的最新节点。
git checkout/git switch切换分支本质就是移动 HEAD;回滚历史(git reset)本质是把分支指针和 HEAD 指回旧节点。
术语速查
| 术语 | 含义 |
|---|---|
| 仓库(repository / repo) | 被 Git 管理的项目目录(含 .git) |
| origin | 远程仓库的默认别名 |
| clone | 把远程仓库完整下载到本地 |
| add / commit | 工作区 → 暂存区 → 本地版本库 |
| push / pull / fetch | 与远程仓库同步的三个动作 |
| merge / rebase | 合并分支的两种方式(合并 vs 变基) |
| conflict(冲突) | 两个分支修改了同一处代码,需人工裁决 |
| .gitignore | 声明不纳入版本管理的文件清单 |
项目分区导航:01-Git与GitHub入门 ⬅️ | 02-git基本概念 | ➡️ git命令分类整理
💬 评论