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 addgit restore --staged 退回
已提交(Committed) 已安全存入本地版本库 git commit

另有一类特殊状态 Untracked(未跟踪):新建的文件还没被 git add 过,Git 对它"视而不见",不纳入版本管理。

本地仓库与远程仓库

  • 本地仓库:项目目录下隐藏的 .git 文件夹就是本地仓库本体,包含全部历史版本、暂存区、分支与配置信息——拷贝这个文件夹,整个仓库就带走了。
  • 远程仓库:托管在网络上的仓库副本,本地通过 remote 机制与之关联。约定俗成把第一个远程命名为 origingit 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命令分类整理