Git与版本控制
Git and Version Control
📖这门课到底讲什么
Git 与版本控制是最早需要掌握的职业基本功:版本库与工作区与暂存区三区模型、提交与历史查看、分支与合并(fast-forward 与三方合并)、冲突解决、变基与挑拣、标签与发布、远程仓库协作(clone/fetch/pull/push)、Pull Request 工作流、以及撤销与回退(reset/revert/restore)。它管理的不是代码好坏,而是变更的历史与协作的秩序。学完你应能熟练用命令行完成日常提交与分支管理、在团队中处理并发修改与冲突、用规范的分支策略组织多人协作、并能在出错时用 reflog 与 revert 安全恢复,形成可追溯的开发习惯。
🎯为什么必须学好
实习与入职第一周就要提交代码,不会 Git 意味着无法参与协作,这几乎是硬门槛;面试中会问你 merge 与 rebase 的区别、代码冲突如何解决、团队分支策略、如何回滚一次已上线的提交、revert 与 reset 的区别。面试官还会看你 GitHub 主页的提交记录与项目质量,一个持续有提交与文档的仓库比简历上的形容词更有说服力。这也是开源贡献的入口。
📌核心知识清单
- 三区模型与基本流程:工作区、暂存区、本地仓库的差异,add 与 commit 的实质,查看状态与差异(status/diff/diff --staged)
- 提交与历史:提交规范与粒度、amend 修正提交、log 的多种过滤与格式化查看、blame 定位责任人、show 查看某次提交的改动
- 分支操作:创建与切换分支、switch 与 checkout、分支删除与重命名、分支是指向提交的可移动指针这一本质
- 合并与冲突:fast-forward 与三方合并的区别、merge 的冲突解决流程、merge --abort、识别冲突标记并合理合并语义
- 变基与历史整理:rebase 的基本流程与线性历史的好处、交互式 rebase(squash、reword、drop)、rebase 已推送分支的风险与黄金法则
- 撤销与恢复:restore 与 checkout 恢复文件、reset 的三种模式(soft/mixed/hard)差异、revert 生成反向提交、reflog 找回丢失提交
- 远程协作:remote 管理、fetch 与 pull 的区别、push 与强制推送的安全做法(--force-with-lease)、标签与发行版本、fork 与 Pull Request 流程
- 团队工作流与规范:Git Flow、GitHub Flow、主干开发对比;提交信息规范(Conventional Commits)、.gitignore、大文件与子模块、code review 实践
✍️怎么学(可执行步骤)
- 以《Pro Git》中文版第1至3章为主线,边读边在自己的仓库里把每条命令执行一遍,尤其要把三区模型画成图贴在笔记第一页
- 用 learnGitBranching 交互式网站把分支、合并、rebase 的动画演示全部通关一遍,再进入真实仓库操作,理解移动指针的过程
- 给每个课程项目建独立仓库:从第一次提交开始就写规范提交信息、按功能开分支、通过 PR 合并,把流程变成肌肉记忆
- 刻意练习事故恢复:本地故意 reset --hard 后用 reflog 找回提交、制造冲突并解决、在测试仓库体验 rebase 与 revert 的区别,写成一篇事故复盘笔记
📚推荐教材与书籍
官方免费电子书,第2章 Git 基础、第3章 分支是核心,第7章讲工具与调试技巧
讲清 Git 内部对象模型(blob/tree/commit)与引用,理解原理后命令行不再神秘
🎬视频课程 / 公开课
一集讲清 Git 的数据模型与日常使用,配中文翻译,是最快的入门路径
选择播放量高的系统课程,配合实际操作完成一个多分支协作演练
🌐网站与文档
中文交互式 Git 练习平台,用游戏化关卡训练分支与 rebase,强烈推荐
Pro Git 中文版在线版,随时查阅
提交信息规范,从学生阶段就养成良好习惯
🐙GitHub 开源资料
Git 自身源码,读它的文档目录与提交历史能学到工程项目的组织与协作方式
中文译名为 Git 飞行规则,专门回答我搞砸了怎么办,收录各种事故恢复方法
GitHub 使用技巧清单,含快捷键、搜索语法与 PR 技巧,提升日常协作效率
🧪动手实践任务
实践 1
在本地仓库完成一次完整的分支协作演练:新建功能分支、提交三次以上、与主干合并、解决一次人为制造的冲突,并截图记录每一步命令
实践 2
完成一次事故恢复实验:提交若干次后执行 reset --hard 丢弃提交,再用 reflog 找回;再练习用 revert 撤销一条已推送的提交并说明两者差别
实践 3
为示例仓库建立 .gitignore 与提交规范,写一份团队协作说明(分支命名、提交信息格式、PR 模板),作为课程项目的团队约定
🧾考试与面试
💼 面试会怎么考
常见:merge 与 rebase 的区别以及各自适用场景(线性历史 vs 保留合并节点);reset 三种模式的区别、如何撤销一次已推送的提交;git pull 与 git fetch 的差别;冲突是怎么产生的、如何解决;如何找回丢失的提交(reflog);一个人开发与多人协作的分支策略有何不同;revert 与 reset 在已上线代码上的选择。面试官也会问你平时使用 GitHub 的习惯与参与过的开源项目。
📝 期末与考研怎么过
这门课多为实验或项目考核,很少单独考试,评分点通常在操作规范与仓库质量:提交信息是否规范、分支是否清晰、有无合并冲突处理记录、README 是否完整。考查方式是当场完成一组操作(建分支、改文件、合并、回滚)或提交一个协作良好的仓库。备考就是平时养成习惯,做到每一步都清楚自己在操作哪个区。
⚠️ 常见坑
- 在主干上直接开发并一次性大提交,历史混乱无法回滚单个功能;应一功能一分支、小步提交
- 对已推送的公共分支强制推送(--force),覆盖他人提交造成事故;必要时用 --force-with-lease
- 把二进制文件与密码密钥提交进仓库,造成体积膨胀或信息泄露;应配置 .gitignore 并学会用环境变量
- 不理解三区模型,遇到误删文件与丢提交就慌张重来,浪费大量时间;reflog 与 revert 是安全网
- 不写有意义的提交信息(提交信息写成更新),三个月后自己都看不懂改了什么