- 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
14 KiB
Git 版本控制入门
💡 学习指南:本章节通过8个交互式演示带你从零掌握 Git。无需编程基础,我们将从日常文件备份的痛点出发,通过可视化操作一步步探索 Git 的核心概念和工作原理。
0. 引言:从"手动备份"到"智能版本管理"
0.1 你是否遇到过这样的困境?
想象一下,你在写一份重要的论文:
论文_最终版.docx
论文_最终版_v2.docx
论文_最终版_真的最终版.docx
论文_最终版_打死不改版.docx
论文_最终版_最后一次修改.docx
论文_最终版_老板说要改版.docx
核心问题:
- 混乱的版本号:你根本分不清哪个是最新的版本
- 无法回退:不小心删了一段重要文字,想找回三天前的版本,但发现覆盖了
- 协作灾难:和同学一起写报告,各自修改后合并成噩梦
- 不知道改了什么:打开两个版本的文件对比,眼睛都看花了
0.2 Git 的解决方案
Git 的核心任务只有一个:记录每一次改动,让你随时回到任何版本。
本教程将通过8个交互式演示,让你直观理解 Git 的核心机制:
- Git工作流 - 完整的提交流程
- 三个区域 - 工作区、暂存区、仓库
- 存储机制 - 增量存储 vs 完整备份
- 命令操作 - 交互式命令行
- 分支管理 - 并行开发的魔法
- 冲突解决 - 协作中的挑战
- Stash工作流 - 任务切换利器
- 远程协作 - 团队协作基础
1. 快速体验:Git 是如何工作的?
让我们通过第一个交互式演示,直观感受 Git 的核心工作流程:
动手试试:
- 点击"初始化仓库",创建你的版本库
- 点击"提交",记录当前的代码状态
- 点击"创建分支",开发新功能而不影响主线
- 点击"合并分支",将新功能整合到一起
💡 观察:每个提交都像给代码拍了一张"照片",Git 记住每一次变化,让你随时回退。
2. 核心概念:Git 的三个区域
2.1 为什么需要三个区域?
传统的备份工具只有一个区域(你的文件夹),你修改文件后就直接覆盖原文件。但这样有个大问题:你无法区分"已保存的版本"和"正在修改的版本"。
Git 的聪明之处在于:它引入了三个区域来管理文件:
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ 工作区 │ ──▶ │ 暂存区 │ ──▶ │ 仓库 │
│ (Working) │ add │ (Staging) │ commit│ (Repository)│
│ │ │ │ │ │
│ 你实际看到的 │ │ 准备提交的 │ │ 永久保存的 │
│ 文件 │ │ 文件清单 │ │ 历史版本 │
└─────────────┘ └─────────────┘ └─────────────┘
类比理解:
- 工作区 = 你的办公桌,你可以随意摆放、修改文件
- 暂存区 = 准备归档的文件筐,你把要保存的文件放进去
- 仓库 = 档案馆,永久保存所有历史版本
2.2 文件的生命周期
未跟踪 (Untracked) → 已修改 (Modified) → 已暂存 (Staged) → 已提交 (Committed)
↑ ↓ ↓ ↓
新建文件 文件内容改变 添加到暂存区 保存到仓库
2.3 交互式演示:三个区域的文件流动
动手试试:
- 点击"新建文件"创建一个文件到工作区
- 选择文件并点击"添加到暂存区"(git add)
- 点击"提交"将暂存区的文件保存到仓库(git commit)
- 观察文件状态的变化和提交历史的生成
💡 观察:暂存区就像一个"中间站",让你可以选择性地提交某些文件,而不是全部。这给了你更精细的控制权。
3. 为什么不用简单的"复制粘贴"?
3.1 传统备份方案的问题
问题 1:空间浪费
版本 1: 一个 100MB 的项目文件
版本 2: 只改了 1 行代码,又要保存 100MB
版本 3: 又改了 2 行代码,再保存 100MB
...
结果:10 个版本 = 1GB 空间,但实际改动只有几行代码
问题 2:无法快速对比
你有 10 个版本的文件,想知道版本 5 和版本 8 之间改了什么: ❌ 只能打开两个文件,肉眼逐行对比 ❌ 容易遗漏,耗时耗力
3.2 Git 的解决方案:增量存储 + 快照
动手试试:
- 切换到"完整备份"模式,观察存储空间的增长
- 切换到"Git 增量存储"模式,对比存储效率
- 点击"添加版本",模拟多次文件修改
- 观察存储统计和空间节省
💡 观察: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 交互式演示:命令行实战
动手试试:
- 查看当前状态:
git status - 添加文件到暂存区:
git add hello.txt - 提交更改:
git commit -m "添加问候文件" - 查看提交历史:
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 合并分支:整合你的工作
动手试试:
- 点击"初始化仓库"创建一个 Git 仓库
- 在 main 分支上提交几次
- 点击"创建分支"开发新功能
- 在 feature 分支上提交几次
- 点击"切换分支"回到 main 分支
- 点击"合并分支"将 feature 合并到 main
💡 观察:注意观察分支历史图,每个分支都有独立的提交线,合并时会创建一个新的合并提交。
5.4 冲突解决:协作的挑战
什么是冲突?
当两个分支修改了同一文件的同一行,Git 无法自动决定保留哪个版本。
动手试试:
- 查看"冲突场景",理解冲突产生的原因
- 点击"模拟产生冲突",查看冲突提示
- 在"冲突解决编辑器"中选择解决方案
- 应用解决方案,完成合并
💡 观察:冲突并不可怕,它是协作的正常现象。关键是要仔细查看冲突内容,与团队沟通后决定保留哪个版本。
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
动手试试:
- 在功能分支上做些修改(点击"做些修改")
- 突然需要修复bug(场景会自动提示)
- 点击"保存工作现场"(git stash)
- 切换分支修复bug并提交
- 切回功能分支,点击"恢复工作现场"
💡 观察: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 交互式演示:远程仓库协作
动手试试:
- 点击"本地提交",在本地创建一些提交
- 点击"推送到远程",将本地提交同步到远程
- 点击"模拟团队更新",让团队成员推送代码
- 点击"拉取远程更新",获取团队的新代码
💡 观察:远程协作的核心是"先拉取,再推送",确保你的代码基于最新版本,避免冲突。
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:修复 bugdocs:文档更新style:格式调整refactor:重构test:添加测试chore:构建/工具
10. 学习资源与工具
10.1 可视化工具
图形化界面(GUI):
- GitHub Desktop:免费,简洁易用
- SourceTree:免费,功能强大
- GitKraken:免费,跨平台
- TortoiseGit:Windows 集成
在线学习:
- Learn Git Branching:https://learngitbranching.js.org/(强烈推荐!)
- Git Immersion:http://gitimmersion.com/
10.2 高级主题(进阶学习)
- Git 内部原理:对象模型、引用、包文件
- Rebase 交互:整理提交历史
- Git Hooks:自动化工作流
- Submodule:子模块管理
11. 总结
Git 核心要点
通过8个交互式演示,我们学习了:
- ✅ 三个区域:工作区 → 暂存区 → 仓库
- ✅ 存储机制:增量存储节省空间
- ✅ 命令操作:add、commit、log
- ✅ 分支管理:并行开发,互不干扰
- ✅ 冲突解决:协作中的挑战与应对
- ✅ Stash工作流:任务切换利器
- ✅ 远程协作:push、pull、团队同步
- ✅ 工作流程:完整的 Git 使用流程
学习建议
- ✅ 多动手实践:通过交互式演示熟悉操作
- ✅ 理解原理:Git 的三个区域、快照机制
- ✅ 查看历史:
git log了解项目演进 - ✅ 不要害怕冲突:冲突是协作的常态
- ✅ 使用工具:GUI 工具可以降低学习曲线
进阶路径
初级: add、commit、pull、push
↓
中级:分支、合并、冲突解决、stash
↓
高级:rebase、交互式 rebase、cherry-pick
↓
专家:Git 内部原理、自定义脚本、性能优化
下一步行动:
- ✅ 通过本章节的8个交互式演示熟悉 Git 操作
- ✅ 创建一个 Git 仓库:
git init - ✅ 练习基础命令:add、commit、log
- ✅ 尝试分支管理:创建、切换、合并
- ✅ 注册 GitHub 账号,推送你的第一个远程仓库
掌握 Git,你就掌握了软件开发的基础设施。现在就开始使用 Git 管理你的代码吧!💪