Ry 的 Git 教程
一份全面的 Git 版本控制指南,从基本的工作流程(如暂存和提交)逐步深入到高级主题,包括交互式变基、远程协作以及 Git 对象数据库的内部机制。
课程概述
📚 内容概要
一份全面的 Git 版本控制指南,从基本工作流程(如暂存和提交)逐步深入到高级主题,包括交互式变基、远程协作以及 Git 对象数据库的内部机制。
从命令行到核心原理,全面掌握世界上最流行的版本控制系统。
作者: Ryan Hodson
致谢: 前言中未明确提及。
🎯 学习目标
- 比较和对比本地、集中式与分布式版本控制系统。
- 识别为 Linux 内核创建 Git 的历史动因。
- 完成基本 Git 设置,包括安装验证、仓库初始化和文件跟踪。
- 初始化 Git 仓库并理解
.git目录的作用。 - 配置全局用户设置,并通过暂存区跟踪项目文件。
- 执行提交以创建项目快照,并通过仓库历史记录进行回顾。
- 使用提交 ID 导航至特定历史提交,并返回当前项目状态。
- 创建和管理带注释的标签,以标识稳定发布版本。
- 使用
git revert撤销特定已提交的更改,同时保持历史记录透明。 - 通过 Git 命令行识别、创建并切换分支。
🔹 第1课:版本控制的历史与基础
概述: 本课程追溯版本控制从手动文件管理发展到复杂分布式系统的演进过程。详细说明本地、集中式与分布式版本控制系统(VCS)之间的架构差异,并解释推动 Git 诞生的具体历史背景。学生还将学习安装 Git 和初始化首个仓库的基础步骤。
学习成果:
- 比较和对比本地、集中式与分布式版本控制系统。
- 识别为 Linux 内核创建 Git 的历史动因。
- 完成基本 Git 设置,包括安装验证、仓库初始化和文件跟踪。
🔹 第2课:掌握基础:暂存与提交
概述: 本课程介绍 Git 仓库的基础生命周期,从标准项目文件夹过渡到受版本控制的环境。学生将学习如何初始化仓库、配置用户身份、跟踪新文件,并管理变更从暂存区进入永久提交历史的过程。
学习成果:
- 初始化 Git 仓库并识别
.git目录的作用。 - 配置全局用户设置,并使用暂存区跟踪项目文件。
- 执行提交以创建项目快照,并通过仓库历史记录进行回顾。
🔹 第3课:撤销更改与浏览历史
概述: 本课程涵盖在仓库内进行时间旅行的关键 Git 技巧,使开发者能够检查过去状态、标记里程碑,并安全地撤销错误操作。学习者将掌握无需永久修改即可查看旧版本的能力,使用带注释的标签标记发布版本,并区分撤销已提交历史与清除未提交的实验性工作之间的区别。
学习成果:
- 使用提交 ID 导航至特定历史提交,并返回当前项目状态。
- 创建和管理带注释的标签,以标识稳定发布版本。
- 使用
git revert撤销特定已提交的更改,同时保持历史记录透明。
🔹 第4课:基本分支与合并
概述: 本课程介绍 Git 分支的基本生命周期,从将分支概念化为独立开发线,到实际执行。学生将学习如何创建、导航和可视化分叉的项目历史,最终通过快速合并和三方合并整合工作,并清理临时分支。
学习成果:
- 通过 Git 命令行识别、创建并切换分支。
- 解读分叉项目历史图示,理解
master分支与功能分支之间的关系。 - 执行并区分“快速合并”与“三方合并”。
🔹 第5课:高级分支与冲突解决
概述: 本课程探讨由项目历史分歧引发的高级 Git 操作。涵盖三方合并的理论机制、使用 -a 标志实现简化提交的实际方法,以及对长期运行的功能分支的管理。学生将学习如何处理复杂的分支交互,手动解决合并冲突,并通过适当的分支清理维护仓库的整洁。
学习成果:
- 解释快速合并与三方合并之间的结构差异。
- 使用
-a标志将暂存与提交合并用于已跟踪文件。 - 通过解读 Git 冲突标记识别并解决合并冲突。
🔹 第6课:重基以获得线性项目历史
概述: 本课程介绍通过移动和压缩提交来维持清晰线性项目历史的技术。学习者将掌握如何从分叉分支转换为统一时间线,使用标准重基、交互式重基(压缩)以及在过程中修改特定提交的能力。本模块结束后,学生将理解如何消除不必要的合并提交,并呈现专业、简洁的提交日志。
学习成果:
- 将功能分支的基点移动到另一分支的顶端,以支持快速合并。
- 使用交互式重基将多个小提交压缩为单一有意义的快照。
- 在重基过程中使用
edit与--amend功能修改现有提交。
🔹 第7课:重写历史与 Reflog 的安全性
概述: 本课程探索维护干净、专业的项目历史的高级 Git 技巧。学习者将掌握“交互式重基”以重写过去的提交,学习精确的工作流将通用提交拆分为细粒度更新,并利用“Reflog”作为强大的安全网来恢复看似丢失的数据。
学习成果:
- 执行交互式重基以修改、编辑或拆分历史提交。
- 使用
git reset --mixed将单个通用提交分解为多个独立且有意义的提交。 - 浏览 Git Reflog,识别并恢复不再关联任何分支的“悬空提交”。
🔹 第8课:通过推送与拉取进行协作
概述: 本课程探讨 Git 中多用户协作的基本工作流程。你将学习如何创建独立的仓库克隆、配置本地身份以模拟不同用户,以及建立“远程”连接以交换代码。课程重点在于在仓库之间同步数据(拉取)和发送数据(推送)的机制,以协调开发工作。
学习成果:
- 克隆与配置: 成功复制仓库并设置本地级别的用户配置。
- 同步远程: 添加远程书签,并使用
fetch与merge整合其他开发者的更改。 - 管理远程状态: 浏览远程分支,并理解在检查非本地代码时的“分离头”状态。
🔹 第9课:集中式共享仓库模型
概述: 本课程介绍从点对点仓库共享向集中式工作流的转变。学生将学习如何创建一个“裸仓库”作为通信枢纽,重新配置远程以适应团队环境,并管理多个开发人员之间的变更同步(推送与拉取),以保持一致的项目历史。
学习成果:
- 初始化并配置一个裸仓库作为中央服务器。
- 管理远程连接,将本地工作流重定向至集中式中心。
- 执行标准化工作流,通过
fetch、rebase与merge更新共享内容并解决分歧历史。
🔹 第10课:分布式集成者模型
概述: 本课程探讨从集中式版本控制向分布式集成者模型的转变,使用 Bitbucket 作为托管平台。学习者将从设置公共仓库起步,逐步掌握一种复杂的流程:由“集成者”审查并合并来自同行开发者公共仓库的贡献,形成官方项目版本。
学习成果:
- 配置 Bitbucket 账户并建立用于分布式协作的公共远程仓库。
- 通过管理多个远程仓库执行“集成者工作流”,获取、审查并合并外部贡献。
- 维护私有本地环境与团队成员公开仓库之间的同步。
🔹 第11课:基于补丁的沟通与工作流
概述: 本课程介绍基于补丁的协作生命周期,这是一种在不需共享中央仓库访问权限的情况下,在开发者之间共享单个提交的方法。学生将学习如何从本地提交生成补丁文件,通过邮件分发,并将收到的补丁集成到主分支中。
学习成果:
- 使用
git format-patch从特定提交或分支生成独立的补丁文件。 - 使用
git am命令和标准输入重定向将外部补丁文件应用到本地仓库。 - 执行完整的集成工作流,包括在临时分支上测试补丁并将其合并到主分支。
🔹 第12课:Git 工具、钩子与高级差异比较
概述: 本课程涵盖用于高级仓库管理的 Git 实用命令与自定义技巧。学生将学习如何通过归档与打包导出和共享仓库,使用 .gitignore 和暂存区保持工作区整洁,通过 Git 钩子自动化工作流,并通过高级差异比较和自定义别名优化命令行体验。
学习成果:
- 区分并执行仓库导出:归档(无历史)与打包(完整历史)。
- 配置文件排除模式,并管理临时的进行中更改。
- 在 Git 内部钩子系统中实现自动化脚本,并通过配置别名简化工作流。
🔹 第13课:Git 底层机制:内部对象数据库
概述: 本课程深入挖掘 Git 友好的“瓷器”命令之下,探索其“管道”——底层对象数据库。你将学习 Git 如何使用四种不同的对象类型(块、树、提交、标签)和 SHA-1 校验和来记录项目历史。本模块结束后,你将理解如何手动操作索引和对象数据库,以在不使用标准高层接口的情况下创建提交。
学习成果:
- 定义并区分 Git 的四种对象类型:块、树、提交和标签。
- 解释 HEAD 和分支引用在指向特定提交对象中的作用。
- 演示“管道”工作流:手动暂存文件、编写树结构、创建提交对象。