# 版本控制系统

> [!abstract] 这是一张 Git 学习地图
> 原笔记已按“理解原理 → 本地使用 → 分支 → 远程协作 → 进阶与底层”的常见路径拆分。详细顺序见 [[Git学习顺序]]。

## 一条常见的 Git 使用路径

```text
理解版本控制
  → 配置 Git / init 或 clone
  → 修改文件
  → status / diff
  → add（暂存）
  → commit（本地提交）
  → branch / merge（并行开发）
  → fetch / pull / push（远程协作）
  → tag（标记发布版本）
  → reflog / reset / stash（排错与恢复）
```

| 阶段           | 笔记                | 学习目标                                                                       | 建议练习                                                               |
| ------------ | ----------------- | -------------------------------------------------------------------------- | ------------------------------------------------------------------ |
| **1. 认知篇**   | [[版本控制概述]]        | 分清集中式与分布式版本控制的本质差异；理解为什么 Git 可以离线提交                                        | 用自己的话向别人解释"为什么分布式比集中式更适合团队协作"                                      |
| **2. 建仓认路**  | [[Git 核心概念与基础操作]] | 理解快照、仓库、四个区域（工作区→暂存区→本地仓库→远程仓库）、文件的三种状态（已修改/已暂存/已提交）                       | `mkdir test-repo && cd test-repo && git init`，运行 `git status` 观察输出 |
| **3. 本地闭环**  | [[Git 暂存与提交]]     | 掌握 `status → diff → add → commit → log` 的完整本地提交流程                          | 新建两个文件，分两次提交，用 `git log --oneline` 查看提交历史                          |
| **4. 查错恢复**  | [[Git 历史查看与撤销]]   | 掌握 `log`（多种格式）、`show`、`reflog`；学会 `amend` 修正提交、`reset` 回退、`restore` 撤销修改   | 故意做错一次提交，用 `amend` 修正；再用 `reset --soft` 撤销一次提交                     |
| **5. 并行开发**  | [[Git 分支管理]]      | 掌握 `branch`（增删改查）、`switch/checkout` 切换、`merge` 合并；学会处理合并冲突；了解 `stash` 临时保存 | 创建功能分支 `feature/login`，修改文件后合并回 `main`，模拟一次冲突并手动解决                 |
| **6. 团队协作**  | [[Git 远程仓库与协作]]   | 理解 `remote` 的概念；掌握 `fetch`（只拉不合并）、`pull`（拉取+合并）、`push`（推送）                 | 在 GitHub/Gitee 创建测试仓库，完成一次 `push` 和一次 `pull`                       |
| **7. 远程分支**  | [[Git 远程分支与跟踪]]   | 分清本地分支 `main`、远程跟踪分支 `origin/main` 和上游分支的关系；理解跟踪（tracking）的含义              | 用 `git branch -vv` 查看跟踪关系，拉取并切换到一个远程分支                             |
| **8. 版本发布**  | [[Git 标签与版本发布]]   | 区分轻量标签和附注标签；掌握 `tag` 的增删改查及推送到远程                                           | 给当前版本打一个附注标签 `v1.0.0`，推送到远程并验证                                     |
| **9. 文件维护**  | [[Git 忽略、删除与清理]]  | 分清 `.gitignore`（忽略未跟踪文件）、`git rm`（删除已跟踪文件）、`git clean`（清理未跟踪文件）的适用场景       | 创建 `.gitignore` 忽略 `*.log`；用 `git clean -n` 预览可清理文件（⚠️ 先预览再执行）     |
| **10. 按需进阶** | [[Git 进阶工具]]      | 了解 `bisect`（二分查找问题提交）、`grep`（搜索历史）、子模块（submodule）、`bundle`（离线传输）           | **有真实需求时再学**，不强制练习                                                 |
| **11. 底层原理** | [[Git 内部原理]]      | 理解对象数据库（blob/tree/commit）、引用（references）、`HEAD` 指针、packfile 打包机制           | 用 `tree .git/objects` 查看对象存储，用 `git cat-file -p` 查看对象内容            |
|              |                   |                                                                            |                                                                    |
## 最小可用命令链

```bash
git status
git diff
git add <file>
git commit -m "message"
git log --oneline --graph
git fetch origin
git pull
git push
```

> [!tip] 学习建议
> 先把“本地闭环”练熟，再进入分支和远程协作；`reset --hard`、`git clean -f` 等会丢数据的命令，应在理解影响范围后再用。



1. **用`-n`保护自己**：涉及删除操作（`reset`、`clean`、`rm`）时，先用预览参数确认影响范围，再执行实际命令。

2. **遇到冲突不必慌**：合并冲突是正常现象，不是错误。关键是学会读懂冲突标记 
```
`<<<<<<<`、`=======`、`>>>>>>>`
```
并手动解决。
   




## 按问题查找

| 我想做什么               | 去哪里看                            |
| ------------------- | ------------------------------- |
| 初始化或克隆仓库            | [[Git 核心概念与基础操作#一、Git 仓库的获取方式]] |
| 看文件有没有修改            | [[Git 核心概念与基础操作#检查文件状态]]        |
| 暂存并提交修改             | [[Git 暂存与提交]]                   |
| 查看历史或回退版本           | [[Git 历史查看与撤销]]                 |
| 合并分支、解决冲突           | [[Git 分支管理#合并分支]]               |
| 同步 GitHub / GitLab  | [[Git 远程仓库与协作]]                 |
| 删除或停止跟踪文件           | [[Git 忽略、删除与清理]]                |
| 理解 blob、tree、commit | [[Git 内部原理#Git 对象]]             |



---

## 快速索引

| 想解决什么问题        | 看哪篇          |
| -------------- | ------------ |
| 刚接触 Git，从零开始   | 阶段 1 → 2 → 3 |
| 提交错了想撤销        | 阶段 4         |
| 开发新功能不想影响主分支   | 阶段 5         |
| 多人协作同步代码       | 阶段 6 → 7     |
| 发布稳定版本         | 阶段 8         |
| 想清理项目文件        | 阶段 9         |
| 想了解 Git 怎么存储数据 | 阶段 11        |
