feat(docs): restructure appendix content into organized directories

- Move standalone AI-related files into 8-artificial-intelligence directory
- Move development tools content into 2-development-tools directory
- Move server/backend content into 4-server-and-backend directory
- Create new index files for each section
- Update .gitignore to exclude old backup directories
- Update theme imports for new component locations
This commit is contained in:
sanbuphy
2026-02-15 01:57:52 +08:00
parent 004496f1d5
commit 07d82d046b
120 changed files with 409 additions and 405 deletions
@@ -0,0 +1,348 @@
# Git:代码的时光机
::: tip 🎯 核心问题
**写代码时最怕什么?** 写错了想回退、改崩了想重来、多人同时改同一个文件...这些头疼的事,Git 都能帮你搞定!它就像是代码世界的"时光机",让你随时回到过去,又能和队友在各自的"平行宇宙"里安全开发。
:::
---
## 0. 最常用的 5 个场景(直接照抄)
如果你只想"立刻能用",先把这块过一遍:每个场景都是现实工作中最常见的 Git 流程。
<GitScenariosDemo />
---
## 1. 为什么要学 Git?三大痛点
### 1.1 痛点一:版本混乱
你是否经历过这种绝望?
```text
论文_初稿.doc
论文_修改版.doc
论文_最终版.doc
论文_最终版_打死不改版.doc
论文_绝对是最后一次修改版.doc
```
**Git 的解决方案**:不需要复制副本,一个文件夹搞定所有历史版本。想回到哪次修改,一键恢复。
### 1.2 痛点二:无法后悔
::: tip 💡 这个场景你一定遇到过
写代码写了 3 小时,突然发现之前的思路更好,但已经改不回去了...或者删错了一段代码,想找回原来的版本。
有了 Git,这种情况永远不会发生。每次重要节点都能"存档",出问题随时"读档"重来。
:::
### 1.3 痛点三:协作冲突
你和队友同时改同一个文件:
- 你改了 A 文件的第 10 行
- 队友改了 A 文件的第 15 行
- 怎么合并?谁覆盖谁?
**Git 的解决方案**:智能合并,自动处理大部分冲突。只有当你们真的改了同一行代码时,才需要手动决定用谁的。
---
## 2. 核心概念:三区模型
Git 的设计哲学其实很像**寄快递**。
<GitThreeAreasDemo />
### 2.1 三个区域是什么?
::: tip 📦 用快递理解 Git
想象你在寄快递:
- **工作区(Working Dir)** = 你的**书桌**。你在这里整理要寄的东西,想怎么乱改都行。
- **暂存区(Staging Area)** = **快递盒**。你把要寄的文件放进去(`git add`),准备打包。
- **仓库(Repository)** = **快递柜**。一旦你封箱寄出(`git commit`),这个版本就被永久记录下来了。
:::
| 区域 | 作用 | 对应命令 | 状态 |
| ---------- | ------------------ | --------------------- | ------------- |
| **工作区** | 你当前正在改的代码 | `git status` 查看修改 | 红色 = 未暂存 |
| **暂存区** | 准备提交的文件 | `git add` 添加 | 绿色 = 已暂存 |
| **仓库** | 永久保存的历史版本 | `git commit` 提交 | 只读,不能改 |
::: tip 💡 关键理解
只有提交到**仓库**的内容才是安全的。工作区里没提交的内容,丢了就真丢了。所以经常`git commit`是好习惯!
:::
---
## 3. 基础工作流:存档三步走
日常开发中,你 90% 的时间都在重复这三个动作。
<GitWorkflowDemo />
### 3.1 第一步:修改代码(工作区)
在工作区写写画画,想怎么改就怎么改。这时候修改只在你本地,还没记录。
### 3.2 第二步:挑选文件(git add → 暂存区)
::: tip 🤔 为什么要先 add 再 commit?
你可能问:为什么不能直接 commit 所有修改?
**答案**:因为有时候你不想一次性提交所有改动。
- 今天改了 5 个文件,但只想提交其中 3 个(完成了一个功能)
- 另外 2 个文件还在调试中,不想现在提交
`git add` 让你有选择权:决定这次提交包含哪些文件。
:::
**常用命令**:
```bash
# 添加单个文件
git add index.html
# 添加所有修改
git add .
# 查看哪些文件被暂存了
git status
```
### 3.3 第三步:封箱提交(git commit → 仓库)
给这次修改起个名字(比如"修复了登录 Bug"),永久存档。
**重要:commit message 要写清楚!**
```bash
# ❌ 不好的写法
git commit -m "update"
# ✅ 好的写法
git commit -m "feat: 添加用户登录功能"
git commit -m "fix: 修复首页在 iOS 的显示问题"
git commit -m "docs: 更新 README 的部署说明"
```
::: tip 💡 commit message 规范
推荐用**类型+描述**的格式:
- `feat:` 新功能
- `fix:` 修复 bug
- `docs:` 文档更新
- `style:` 代码格式(不影响功能)
- `refactor:` 重构(不改变功能)
- `test:` 测试相关
- `chore:` 构建/工具相关
这样以后翻历史记录,一眼就知道每次提交做了什么。
:::
---
## 4. 平行宇宙:分支(Branch)的魔法
这是 Git 最强大的功能!
::: tip 🌌 用游戏理解分支
想象你在玩游戏,前面有个大 Boss(上线新功能),你怕打不过导致游戏结束(系统崩溃)。
这时候,你可以开一个**分支(Branch)**,相当于**复制了一个平行世界**:
- 在**平行世界**(新分支)里打 Boss,输了也不怕,因为主世界(主分支)没影响
- 打赢了就把成果"合并"回主世界
- 多个队友可以在各自的平行世界开发,互不干扰
:::
<GitBranchMergeDemo />
### 4.1 主分支 vs 开发分支
| 分支类型 | 作用 | 特点 |
| ------------------- | -------------- | ------------------------------------ |
| **main/master** | 稳定的线上版本 | 只有测试通过的代码才能进来 |
| **dev/feature-xxx** | 你的试验田 | 这里炸了地球也没关系,不影响主分支 |
| **hotfix-xxx** | 紧急修复 | 生产出 bug 时,从 main 开分支快速修复 |
### 4.2 分支操作流程
**创建分支并切换**:
```bash
# 创建新分支
git branch feature-login
# 切换到新分支
git checkout feature-login
# 或者一步到位:创建并切换
git checkout -b feature-login
```
**在分支上开发**:
```bash
# 在 feature-login 分支上改代码...
git add .
git commit -m "feat: 添加登录表单"
```
**合并回主分支**:
```bash
# 切回主分支
git checkout main
# 合并 feature-login
git merge feature-login
# 删除已合并的分支(可选)
git branch -d feature-login
```
::: tip 💡 什么时候用分支?
**个人开发**:
- 要尝试新想法,不确定会不会搞崩现有代码 → 开分支
- 修一个复杂 bug,需要多次实验 → 开分支
**团队开发**:
- 每个功能一个分支,互不干扰
- 开发完提 Pull Request,队友 review 后再合并
:::
---
## 5. 常用命令速查表
| 命令 | 作用 | 人话解释 | 使用频率 |
| ----------------------- | ---------- | ------------------------------ | --------------------- |
| `git init` | 初始化 | "在这里建个新仓库" | 项目开始时用一次 |
| `git status` | 查看状态 | "现在乱不乱?有没有东西没提交?" | ⭐⭐⭐⭐⭐ 极高频 |
| `git add .` | 添加所有 | "把桌上所有文件都扔进快递盒" | ⭐⭐⭐⭐⭐ 每次提交前 |
| `git add file.txt` | 添加单个 | "只要这个文件" | ⭐⭐⭐⭐ 选择性添加 |
| `git commit -m "..."` | 提交 | "封箱!贴上标签,写上这次改了啥" | ⭐⭐⭐⭐⭐ 完成功能时 |
| `git log` | 查看历史 | "翻翻以前的日记" | ⭐⭐⭐ 回顾历史 |
| `git checkout -b dev` | 创建新分支 | "我要去平行宇宙 dev 探险了" | ⭐⭐⭐⭐ 开新功能 |
| `git checkout main` | 切换分支 | "回地球(主分支)看看" | ⭐⭐⭐⭐ 切换任务 |
| `git merge dev` | 合并分支 | "把平行宇宙的成果带回地球" | ⭐⭐⭐ 完成功能 |
| `git branch` | 查看分支 | "现在有哪些平行世界?" | ⭐⭐⭐ 查看状态 |
| `git branch -d feature` | 删除分支 | "这个平行世界不需要了,删掉" | ⭐⭐ 合并后清理 |
| `git push` | 推送 | "把本地存档上传到云端" | ⭐⭐⭐⭐⭐ 团队协作 |
| `git pull` | 拉取 | "把云端最新存档下载到本地" | ⭐⭐⭐⭐⭐ 团队协作 |
---
## 6. 进阶:解决冲突与远程协作
### 6.1 冲突(Conflict)是什么?
当你和队友**同时修改了同一个文件的同一行代码**,Git 就会懵:"我该听谁的?"这就是**冲突(Conflict)**。
<GitConflictDemo />
### 6.2 怎么解决冲突?
**Step 1**:打开冲突文件,会看到这样的标记:
```text
<<<<<<< HEAD
你的代码
=======
队友的代码
>>>>>>> feature-branch
```
**Step 2**:手动选择要保留的代码,或合并两者:
```text
# 保留你的代码 → 删除队友的部分和标记
# 保留队友的 → 删除你的部分和标记
# 合并两者 → 综合两边的代码
```
**Step 3**:删除所有标记,保存文件
**Step 4**:重新提交
```bash
git add 解决冲突的文件
git commit # Git 会自动生成合并提交
```
::: tip 💡 避免冲突的最佳实践
- **频繁沟通**:队友改同一个文件前,先打个招呼
- **小步提交**:不要攒着大量代码最后才提交,增加冲突概率
- **分支隔离**:不同功能用不同分支,减少直接冲突
- **用 Pull Request**:合并前让队友 review,提前发现问题
:::
### 6.3 远程仓库(Remote)
**远程仓库**(比如 GitHub/GitLab)就是**云端的备份中心**。
<GitRemoteDemo />
**核心操作**:
| 操作 | 命令 | 作用 |
| ------------ | ---------------------------------------------- | ------------------------ |
| **关联远程** | `git remote add origin https://github.com/...` | 第一次连接云端 |
| **推送** | `git push -u origin main` | 把本地存档上传 |
| **拉取** | `git pull` | 把云端最新存档下载并合并 |
| **克隆** | `git clone https://github.com/...` | 复制整个仓库到本地 |
::: tip 💡 push 和 pull 的区别
- **push**:你的本地代码 → 云端(你改了东西,要同步给队友)
- **pull**:云端代码 → 你的本地(队友改了东西,你要同步下来)
**最佳实践**:每天开始工作前先`git pull`,下班前`git push`,这样减少冲突。
:::
---
## 7. 总结:Git 的核心思想
Git 不是简单的"版本备份",而是一个**完整的代码协作系统**:
| 特性 | 解决的问题 | 生活类比 |
| ------------ | ------------------------------- | --------------------- |
| **版本管理** | 代码改错了怎么办? | 时光机,随时回退 |
| **分支** | 多人同时改同一个文件怎么办? | 平行宇宙,互不干扰 |
| **暂存区** | 这次提交不想包含所有修改怎么办? | 快递盒,挑拣要寄的东西 |
| **远程协作** | 怎么和队友共享代码? | 云备份,随时随地同步 |
| **冲突处理** | 真的改到同一行了怎么办? | 智能合并 + 手动协调 |
**学习建议**:
1. **先用起来**:不要等"完全理解"再用,一边用一边理解
2. **从简单开始**:个人项目先掌握`add/commit/push/pull`,团队项目再学分支
3. **看 Git 图形化工具**:SourceTree、GitHub Desktop 等,可视化帮助理解
4. **遇到问题不要慌**:Git 的设计就是为了让你能安全地尝试,大不了`git reset`
---
## 附录:名词速查表
| 名词 | 英文 | 用人话解释 |
| -------- | ---------- | ------------------------------------- |
| **仓库** | Repository | 存放所有版本历史的数据库 |
| **提交** | Commit | 一次完整的版本记录,像存档点 |
| **分支** | Branch | 独立的开发线,像平行宇宙 |
| **合并** | Merge | 把一个分支的改动整合到另一个分支 |
| **冲突** | Conflict | 同一行代码被修改多次,Git 不知道选哪个 |
| **暂存** | Stage | 把修改加入"准备提交"的列表 |
| **远程** | Remote | 云端的仓库副本(GitHub/GitLab) |
| **克隆** | Clone | 复制整个远程仓库到本地 |
| **推送** | Push | 本地 → 远程,上传代码 |
| **拉取** | Pull | 远程 → 本地,下载代码 |
| **检出** | Checkout | 切换到某个分支或版本 |
| **HEAD** | - | 当前所在的分支/版本的指针 |