软件工程本科生宝典
首页/课程学习引导/Git与版本控制
软件工程 · 大一下

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 实践

✍️怎么学(可执行步骤)

  1. 以《Pro Git》中文版第1至3章为主线,边读边在自己的仓库里把每条命令执行一遍,尤其要把三区模型画成图贴在笔记第一页
  2. 用 learnGitBranching 交互式网站把分支、合并、rebase 的动画演示全部通关一遍,再进入真实仓库操作,理解移动指针的过程
  3. 给每个课程项目建独立仓库:从第一次提交开始就写规范提交信息、按功能开分支、通过 PR 合并,把流程变成肌肉记忆
  4. 刻意练习事故恢复:本地故意 reset --hard 后用 reflog 找回提交、制造冲突并解决、在测试仓库体验 rebase 与 revert 的区别,写成一篇事故复盘笔记

📚推荐教材与书籍

Pro Git(第2版)中文版Scott Chacon, Ben Straub · 经典

官方免费电子书,第2章 Git 基础、第3章 分支是核心,第7章讲工具与调试技巧

Git版本控制管理(第2版)Jon Loeliger, Matthew McCullough · 进阶

讲清 Git 内部对象模型(blob/tree/commit)与引用,理解原理后命令行不再神秘

🎬视频课程 / 公开课

一集讲清 Git 的数据模型与日常使用,配中文翻译,是最快的入门路径

选择播放量高的系统课程,配合实际操作完成一个多分支协作演练

🌐网站与文档

中文交互式 Git 练习平台,用游戏化关卡训练分支与 rebase,强烈推荐

Pro Git 中文版在线版,随时查阅

提交信息规范,从学生阶段就养成良好习惯

🐙GitHub 开源资料

git/git⭐ 52k+

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 是安全网
  • 不写有意义的提交信息(提交信息写成更新),三个月后自己都看不懂改了什么
→ 查看 大一下学期 的完整学期安排