Files
test-repo/docs/zh-cn/appendix/git-intro.md
T
sanbuphy 73f4788d7e feat: comprehensive documentation and demo updates
- Update READMEs and docs across multiple languages
- Enhance interactive demos for Agent, LLM, VLM, Audio, Image Gen, Terminal, and Web Basics
- Add new appendix sections for Database and IDE intros
- Update VitePress config, theme, and utility scripts
- Clean up unused assets and components
2026-01-16 19:10:51 +08:00

14 KiB

Git 版本控制入门

💡 学习指南:本章节通过8个交互式演示带你从零掌握 Git。无需编程基础,我们将从日常文件备份的痛点出发,通过可视化操作一步步探索 Git 的核心概念和工作原理。

0. 引言:从"手动备份"到"智能版本管理"

0.1 你是否遇到过这样的困境?

想象一下,你在写一份重要的论文:

论文_最终版.docx
论文_最终版_v2.docx
论文_最终版_真的最终版.docx
论文_最终版_打死不改版.docx
论文_最终版_最后一次修改.docx
论文_最终版_老板说要改版.docx

核心问题:

  1. 混乱的版本号:你根本分不清哪个是最新的版本
  2. 无法回退:不小心删了一段重要文字,想找回三天前的版本,但发现覆盖了
  3. 协作灾难:和同学一起写报告,各自修改后合并成噩梦
  4. 不知道改了什么:打开两个版本的文件对比,眼睛都看花了

0.2 Git 的解决方案

Git 的核心任务只有一个:记录每一次改动,让你随时回到任何版本

本教程将通过8个交互式演示,让你直观理解 Git 的核心机制:

  1. Git工作流 - 完整的提交流程
  2. 三个区域 - 工作区、暂存区、仓库
  3. 存储机制 - 增量存储 vs 完整备份
  4. 命令操作 - 交互式命令行
  5. 分支管理 - 并行开发的魔法
  6. 冲突解决 - 协作中的挑战
  7. Stash工作流 - 任务切换利器
  8. 远程协作 - 团队协作基础

1. 快速体验:Git 是如何工作的?

让我们通过第一个交互式演示,直观感受 Git 的核心工作流程:

动手试试:

  1. 点击"初始化仓库",创建你的版本库
  2. 点击"提交",记录当前的代码状态
  3. 点击"创建分支",开发新功能而不影响主线
  4. 点击"合并分支",将新功能整合到一起

💡 观察:每个提交都像给代码拍了一张"照片",Git 记住每一次变化,让你随时回退。


2. 核心概念:Git 的三个区域

2.1 为什么需要三个区域?

传统的备份工具只有一个区域(你的文件夹),你修改文件后就直接覆盖原文件。但这样有个大问题:你无法区分"已保存的版本"和"正在修改的版本"

Git 的聪明之处在于:它引入了三个区域来管理文件:

┌─────────────┐      ┌─────────────┐      ┌─────────────┐
│  工作区      │ ──▶  │  暂存区      │ ──▶  │  仓库        │
│ (Working)   │ add  │ (Staging)   │ commit│ (Repository)│
│             │      │             │      │             │
│ 你实际看到的  │      │ 准备提交的    │      │ 永久保存的    │
│ 文件         │      │ 文件清单      │      │ 历史版本     │
└─────────────┘      └─────────────┘      └─────────────┘

类比理解:

  • 工作区 = 你的办公桌,你可以随意摆放、修改文件
  • 暂存区 = 准备归档的文件筐,你把要保存的文件放进去
  • 仓库 = 档案馆,永久保存所有历史版本

2.2 文件的生命周期

未跟踪 (Untracked) → 已修改 (Modified) → 已暂存 (Staged) → 已提交 (Committed)
    ↑                   ↓                  ↓                  ↓
 新建文件          文件内容改变       添加到暂存区        保存到仓库

2.3 交互式演示:三个区域的文件流动

动手试试:

  1. 点击"新建文件"创建一个文件到工作区
  2. 选择文件并点击"添加到暂存区"(git add)
  3. 点击"提交"将暂存区的文件保存到仓库(git commit)
  4. 观察文件状态的变化和提交历史的生成

💡 观察:暂存区就像一个"中间站",让你可以选择性地提交某些文件,而不是全部。这给了你更精细的控制权。


3. 为什么不用简单的"复制粘贴"?

3.1 传统备份方案的问题

问题 1:空间浪费

版本 1: 一个 100MB 的项目文件
版本 2: 只改了 1 行代码,又要保存 100MB
版本 3: 又改了 2 行代码,再保存 100MB
...
结果:10 个版本 = 1GB 空间,但实际改动只有几行代码

问题 2:无法快速对比

你有 10 个版本的文件,想知道版本 5 和版本 8 之间改了什么: 只能打开两个文件,肉眼逐行对比 容易遗漏,耗时耗力

3.2 Git 的解决方案:增量存储 + 快照

动手试试:

  1. 切换到"完整备份"模式,观察存储空间的增长
  2. 切换到"Git 增量存储"模式,对比存储效率
  3. 点击"添加版本",模拟多次文件修改
  4. 观察存储统计和空间节省

💡 观察:Git 通过增量存储和内容寻址,只保存文件的变更部分。随着版本增加,空间节省越明显。


4. 第一次提交:Git 基础命令

4.1 初始化仓库

# 在当前目录创建 Git 仓库
git init

# 输出:
# Initialized empty Git repository in /your/project/.git/

发生了什么?

Git 在你的项目目录下创建了一个隐藏的 .git 文件夹:

your-project/
├── .git/           # Git 的所有数据都在这里
│   ├── objects/    # 存储所有文件对象
│   ├── refs/       # 存储分支和标签引用
│   ├── HEAD        # 指向当前分支
│   └── config      # 仓库配置
└── your-files/     # 你的项目文件

4.2 查看状态

# 查看当前仓库状态
git status

4.3 添加文件到暂存区

# 添加单个文件
git add hello.txt

# 添加所有文件
git add .

4.4 提交到仓库

# 提交并添加说明
git commit -m "第一次提交:添加问候文件"

4.5 交互式演示:命令行实战

动手试试:

  1. 查看当前状态:git status
  2. 添加文件到暂存区:git add hello.txt
  3. 提交更改:git commit -m "添加问候文件"
  4. 查看提交历史:git log --oneline

💡 观察:通过真实的命令行操作,理解 Git 的工作流程。记住:工作区 → add → 暂存区 → commit → 仓库


5. 分支管理:并行开发的魔法

5.1 什么是分支?

传统开发的问题:

你想开发一个新功能,但不想影响当前稳定的代码,怎么办?

传统方案:

❌ 复制整个项目文件夹
   project/           # 当前版本
   project-feature/   # 开发新功能

问题:

  • 浪费空间(两个完整副本)
  • 两个版本容易混淆
  • 合并时困难

Git 的解决方案:分支

Git 的分支不是复制整个项目,而是:

  • 只保存当前版本的"指针"
  • 分支创建是瞬间完成的
  • 分支间切换极其快速

类比:

📚 分支就像书的"草稿":

  • 正式内容在 main 分支(可以出版)
  • 新想法在 feature 分支(自由修改)
  • 修改完成后,合并到 main 分支

5.2 分支的基本操作

创建和切换分支:

# 查看所有分支
git branch

# 创建新分支
git branch feature-login

# 切换到新分支
git checkout feature-login

# 创建并切换(一步完成)
git checkout -b feature-login

# 或使用新的 switch 命令(推荐)
git switch -c feature-login

5.3 合并分支:整合你的工作

动手试试:

  1. 点击"初始化仓库"创建一个 Git 仓库
  2. 在 main 分支上提交几次
  3. 点击"创建分支"开发新功能
  4. 在 feature 分支上提交几次
  5. 点击"切换分支"回到 main 分支
  6. 点击"合并分支"将 feature 合并到 main

💡 观察:注意观察分支历史图,每个分支都有独立的提交线,合并时会创建一个新的合并提交。

5.4 冲突解决:协作的挑战

什么是冲突?

当两个分支修改了同一文件的同一行,Git 无法自动决定保留哪个版本。

动手试试:

  1. 查看"冲突场景",理解冲突产生的原因
  2. 点击"模拟产生冲突",查看冲突提示
  3. 在"冲突解决编辑器"中选择解决方案
  4. 应用解决方案,完成合并

💡 观察:冲突并不可怕,它是协作的正常现象。关键是要仔细查看冲突内容,与团队沟通后决定保留哪个版本。


6. 实用技巧:Git 的高级用法

6.1 撤销操作:时间旅行

# 恢复文件到最近一次提交的状态
git restore file.txt

# 撤销最后一次提交(保留修改)
git reset --soft HEAD~1

# 回到某个历史版本
git reset --hard <commit-hash>

6.2 暂存工作:切换任务的利器

场景:你正在开发功能 A,突然需要紧急修复 bug B,但功能 A 还没完成。

解决方案:使用 git stash

动手试试:

  1. 在功能分支上做些修改(点击"做些修改")
  2. 突然需要修复bug(场景会自动提示)
  3. 点击"保存工作现场"(git stash)
  4. 切换分支修复bug并提交
  5. 切回功能分支,点击"恢复工作现场"

💡 观察:stash 让你在不同任务间快速切换,而不需要提交未完成的工作。它使用栈结构,后进先出。

6.3 查看差异:代码审计

# 查看工作区修改(未暂存)
git diff

# 查看暂存区修改(已暂存)
git diff --staged

# 查看两次提交之间的差异
git diff <commit1> <commit2>

7. 远程仓库:团队协作的基础

7.1 什么是远程仓库?

本地仓库 = 你电脑上的 .git 文件夹 远程仓库 = 存储在服务器上的仓库副本(如 GitHub、GitLab)

为什么需要远程仓库?

  • 🔄 备份:代码保存在云端,不怕硬盘损坏
  • 👥 协作:团队成员可以共享代码
  • 🏠 部署:自动部署到生产环境

7.2 推送到远程

# 首次推送(设置上游分支)
git push -u origin main

# 后续推送
git push

7.3 从远程拉取

# 拉取远程更新并合并
git pull origin main

# 等价于:
git fetch origin main    # 从远程获取更新
git merge origin/main     # 合并到本地

7.4 交互式演示:远程仓库协作

动手试试:

  1. 点击"本地提交",在本地创建一些提交
  2. 点击"推送到远程",将本地提交同步到远程
  3. 点击"模拟团队更新",让团队成员推送代码
  4. 点击"拉取远程更新",获取团队的新代码

💡 观察:远程协作的核心是"先拉取,再推送",确保你的代码基于最新版本,避免冲突。


8. 常见问题与解决方案

8.1 忘记推送某文件

问题:提交后发现忘了添加某个文件。

# 添加遗漏的文件
git add forgotten-file.txt

# 修改最后一次提交
git commit --amend

# 如果已推送,需要强制推送(谨慎!)
git push -f origin branch

8.2 提交信息写错了

# 修改最后一次提交信息
git commit --amend -m "正确的提交信息"

8.3 推送被拒绝

问题:本地和远程历史不一致。

# 方法 1:先拉取再推送(推荐)
git pull --rebase origin main
git push origin main

# 方法 2:强制推送(会覆盖远程,危险!)
git push -f origin main

9. Git 配置与最佳实践

9.1 基本配置

# 设置用户名(必填)
git config --global user.name "Your Name"

# 设置邮箱(必填)
git config --global user.email "your.email@example.com"

# 设置默认分支名
git config --global init.defaultBranch main

9.2 忽略文件

创建 .gitignore 文件:

# 忽略文件
*.log
*.tmp
.env
.DS_Store

# 忽略文件夹
node_modules/
dist/
.cache/

9.3 提交规范

好的提交信息:

# 格式:
<type>(<scope>): <subject>

# 示例:
feat(auth): 添加用户登录功能
fix(login): 修复密码验证错误
docs(readme): 更新安装说明

类型(type):

  • feat:新功能
  • fix:修复 bug
  • docs:文档更新
  • style:格式调整
  • refactor:重构
  • test:添加测试
  • chore:构建/工具

10. 学习资源与工具

10.1 可视化工具

图形化界面(GUI):

  • GitHub Desktop:免费,简洁易用
  • SourceTree:免费,功能强大
  • GitKraken:免费,跨平台
  • TortoiseGit:Windows 集成

在线学习:

10.2 高级主题(进阶学习)

  • Git 内部原理:对象模型、引用、包文件
  • Rebase 交互:整理提交历史
  • Git Hooks:自动化工作流
  • Submodule:子模块管理

11. 总结

Git 核心要点

通过8个交互式演示,我们学习了:

  1. 三个区域:工作区 → 暂存区 → 仓库
  2. 存储机制:增量存储节省空间
  3. 命令操作:add、commit、log
  4. 分支管理:并行开发,互不干扰
  5. 冲突解决:协作中的挑战与应对
  6. Stash工作流:任务切换利器
  7. 远程协作:push、pull、团队同步
  8. 工作流程:完整的 Git 使用流程

学习建议

  • 多动手实践:通过交互式演示熟悉操作
  • 理解原理:Git 的三个区域、快照机制
  • 查看历史:git log 了解项目演进
  • 不要害怕冲突:冲突是协作的常态
  • 使用工具:GUI 工具可以降低学习曲线

进阶路径

初级: add、commit、pull、push
   ↓
中级:分支、合并、冲突解决、stash
   ↓
高级:rebase、交互式 rebase、cherry-pick
   ↓
专家:Git 内部原理、自定义脚本、性能优化

下一步行动:

  1. 通过本章节的8个交互式演示熟悉 Git 操作
  2. 创建一个 Git 仓库:git init
  3. 练习基础命令:add、commit、log
  4. 尝试分支管理:创建、切换、合并
  5. 注册 GitHub 账号,推送你的第一个远程仓库

掌握 Git,你就掌握了软件开发的基础设施。现在就开始使用 Git 管理你的代码吧!💪