跳到主要内容
🔍
0.3.1已发布beginner · 约 1.5 课时 · P0

Git 核心概念与安装

理解 Git 分布式版本控制模型与四区流转,完成本机安装与首次身份配置

  • 来源
  • 补充
  • 更新

标记说明:【来源】来自上传资料 · 【补充】课程新编 · 【纠错】按勘误表修正 · 【更新】过时内容已现代化 · 【待确认】无法可靠还原

完成标准(本章)

  • 📖 已阅读:滚动 ≥ 80% 且有效阅读 ≥ 120
  • ✏️ 已练习:小练习正确率 ≥ 60%
  • 📝 已通过测验:分数 ≥ 60
  • 🛠️ 已掌握还需完成实践任务
学习状态:未开始

0.3.1 Git 核心概念与安装

本章来源:版本控制意义、分布式模型、四区与快照、SHA-1 来自《第一阶段讲义》1.1/1.3 节【来源】,经重新组织表述;默认分支名与 SHA-256 迁移为【更新】说明;安装验证命令、本机实验、通俗解释与全部练习为新编【补充】。平台适用性 universal。

① 学习目标

  1. 说出版本控制解决什么问题,以及 Git 与"网盘备份"的本质区别;
  2. 画出 工作区 → 暂存区 → 版本库 → 远程仓库 的四区流转图;
  3. 说明快照与 SHA-1 哈希的作用,并知道 Git 正在向 SHA-256 过渡;
  4. 独立完成本机安装(或确认已安装)与首次提交身份配置;
  5. git init 建立自己的练习目录并完成第一次提交(实践任务)。

② 前置知识

  • 建议:0.2.4(命令行基本操作:目录切换、运行程序);无硬性前置。

③ 核心概念【来源】

概念说明
版本控制记录每次修改的历史,可回退、可对比、可协作;解决"改坏了回不去/多人改同一文件"问题
分布式每个克隆都是完整仓库(含全部历史),离线可提交;集中式(如 SVN)提交必须联网到中央服务器
四区模型工作区(你的目录)→ git add → 暂存区(index)→ git commit → 版本库(.git)→ git push → 远程仓库
快照Git 记录的是每次提交时整棵目录树的快照,未改动的文件只存一个引用,不重复存储
SHA-1对象内容经 SHA-1 哈希命名(如 4c979c7...),内容寻址 + 防篡改;【更新】git 2.29+ 已提供试验性的 SHA-256 仓库格式,官方在推进迁移,学习时知道即可
默认分支**【更新】**新版 git 的 git init 默认分支名为 main(老版本为 master),可用 git init -b 名字 指定

④ 通俗解释【补充】

把 Git 想象成一家快递仓库:

  • 工作区是你的办公桌——文件随便改;
  • 暂存区是打包台——git add 就是把要发货的文件放上打包台,你决定哪些改动进入这次提交;
  • 版本库是仓库货架——git commit 把打包台的东西装箱上架,每箱都贴一张"全店照片"(快照)和编号(哈希),随时可以按编号找回任何一次状态;
  • 远程仓库是异地总仓——git push 把货架同步过去,换台电脑 git clone 把整个货架搬回来。

这就是为什么误删文件不用怕:货架上有每一次的"全店照片"。

⑤ 示例代码

代码示例与验证记录

  • examples/git-basics-commands.txtGit 最小命令清单(安装验证→身份配置→init→首次提交)✓ 已实测(git 2.53.0.windows.2 / Windows 11, 2026-08-15
    编译:按文件内顺序在终端逐行执行
    适用环境:LinuxWindows(MinGW)macOS
    展开预期输出(实测)
    git version 2.53.0.windows.2
    Initialized empty Git repository in <你的目录>/.git/
    ?? notes.txt                    (add 前:未跟踪)
    A  notes.txt                    (add 后:已暂存)
    [main (root-commit) 4c979c7] init: 学习笔记目录
    4c979c7 init: 学习笔记目录
    

    差异说明:哈希值(4c979c7)每次不同;默认分支名 main(老版本 git 可能显示 master);本输出为 git 2.53.0 / Windows 11 本机实测

    完整源码见 /code 代码示例页

⑥ 编译与运行方法

本章无编译步骤:命令在终端逐行执行(Windows PowerShell/CMD 与 Linux bash 命令相同)。建议先看 ⑦ 常见错误再动手——第一次 commit 大概率会遇到身份配置报错。

⑦ 常见错误

症状原因解决
Please tell me who you are(commit 时报错)未配置提交身份 user.name/user.emailgit config user.name "你的名字"git config user.email "you@example.com"(本机实验已复现并解决)
提示"不是 git 仓库"(not a git repository)当前目录不是仓库,或 init 建错了目录cd 到仓库目录;确认 .git 子目录存在
默认分支显示 master 而资料说 main旧版本 git 的默认值git init -b main,或设置 git config --global init.defaultBranch main
警告 LF will be replaced by CRLFWindows 换行符与仓库内换行符的自动转换提示无碍提交,属正常警告;细节在 0.3.5 展开
中文文件名/路径显示乱码终端代码页与文件名编码不一致路径尽量用英文;终端 chcp 65001(了解即可)

⑧ 小练习

小练习

学习自测:提交后才显示答案与解析(前端判分,不作为正式考试)
  • ex-0-3-1-1.执行 git add 后,文件改动进入了哪个区域?(单选)

    ◌ 未作答
  • ex-0-3-1-2.想把刚修改的文件记录成一次提交,正确顺序是?(单选)

    ◌ 未作答
  • ex-0-3-1-3.首次 git commit 报错 Please tell me who you are,原因是?(单选)

    ◌ 未作答

⑨ 章节测验

章节测验

5 题题库 · 随机抽 5 题 · 及格线 60 分 · 前端判分(学习自测)
开始测验 →

⑩ 实战任务

实践任务

建立自己的练习仓库并画出四区流转图

用 git init 建立"学习笔记"练习仓库,配置提交身份并完成第一次提交; 同时画出工作区→暂存区→版本库→远程仓库的四区流转图(标注 add/commit/push 三条流转命令)。

输入与输出

无程序输入输出。交付物:① 本地练习仓库(git log 至少 1 条提交);② 四区流转图(手绘或电子版均可)。

功能要求

  • 在专用目录执行 git init 建立仓库
  • 配置本地提交身份(user.name / user.email,本项目级即可)
  • 放入至少 1 个文件(如环境笔记),git add 后 git commit
  • 画出四区流转图并标注 git add / git commit / git push 所在箭头

限制条件

  • 实验只用本地仓库,不创建任何远程仓库
  • 路径与文件名尽量使用英文,避免中文编码干扰

验收步骤(自检清单 0/4

验收标准

  • git log --oneline 至少输出 1 条提交(验收步骤 3)
  • git config --local --list 能看到 user.name 与 user.email(验收步骤 1)
  • 四区流转图包含四个区域且 add/commit/push 标注正确(验收步骤 4)

常见失败原因

  • 忘记配置身份就 commit(报 Please tell me who you are)
  • 在仓库目录之外运行 git 命令(提示 not a git repository)
  • 四区流转图漏掉暂存区

可选扩展

  • 用 git diff 观察 add 前后的差异
  • 用 git log --stat 查看每次提交改动了哪些文件

完成必要清单后才能计入"已完成实践"(学习状态自动推导,不提供一键完成)

⑪ 面试问题

面试问题

  • 项目里为什么要用版本控制工具?它解决了什么问题?高频C/C++ · easy

    要点:记录每次修改的历史,支持回退、对比、协作与发布,避免"改坏了回不去"和多人互相覆盖。

    核心是"可追溯、可回退、可协作":每次提交都有快照和编号,任何历史版本都能找回与对比 (谁、何时、改了什么);多人并行开发时按分支隔离、合并冲突显式化,而不是互相覆盖文件; 配合远程仓库还能异地备份与代码评审。对比"网盘备份":网盘只能存"某一时刻的整份文件", 无法回答"第 3 天改了什么、为什么改",也没有分支/合并/评审这些工程语义。

    追问:
    • 追问:没有版本控制的团队一般会遇到什么典型事故?
    评分要点:
    • 可追溯/可回退/可协作三点
    • 与网盘备份的本质区别
  • 工作区、暂存区、版本库有什么区别?git add 和 git commit 各自做了什么?高频C/C++ · medium

    要点:工作区是磁盘上的目录;暂存区是下一次提交的候选清单;版本库保存全部历史提交。add 把改动放入暂存区,commit 把暂存区内容固化为一版快照。

    工作区(working tree)是正在编辑的目录;暂存区(index/staging area)记录"下一次提交将包含哪些改动"; 版本库(repository,.git 目录)保存所有历史提交对象与引用。git add 把文件改动登记进暂存区 (可以先 add 一部分),git commit 把暂存区的内容固化为一次带哈希编号的快照提交。 正因为有暂存区,才能做到"只提交改动的一部分、拆成多个语义清晰的提交"。

    追问:
    • 追问:git commit 之后暂存区会变空吗?(不会,提交的就是暂存区内容本身)
    • 追问:如何跳过暂存区直接提交已跟踪文件的改动?(git commit -am)
    评分要点:
    • 三区定义准确
    • add/commit 职责区分
    • 提到"部分提交"能力
  • Git 是分布式版本控制,这对实际开发意味着什么?和 SVN 相比有什么优势?高频C/C++ · medium

    要点:每个克隆都是完整仓库:离线可提交、可看全部历史;操作快、不怕中央服务器故障;协作靠推拉而不是唯一中央库。

    分布式意味着每个开发者的克隆都包含完整历史,断网时依然可以提交、建分支、看日志, 联网后再 push 同步;日常操作(log/diff/commit)不依赖服务器,速度快;中央服务器故障 不阻塞本地开发,任何完整克隆都能恢复仓库。SVN 等集中式工具提交必须联网,历史在服务器上。 代价:模型多一个"推/拉"环节,概念稍多(这正是 0.3.1 要学的四区模型)。

    追问:
    • 追问:分布式是否意味着不需要服务器?(不,远程仓库承担备份与协作枢纽角色)
    评分要点:
    • 离线可提交/完整历史
    • 速度与容灾
    • 与集中式的区别

⑫ 延伸阅读

  • 《Pro Git》(官方免费书,git-scm.com/book,只引名称不复制内容);
  • Git 官方文档:git-scm.com/doc;
  • 本地手册:git help <命令>(如 git help commit);
  • 下一章预告:0.3.2 基础命令 init/add/commit——把本章的"一次提交"变成日常流水线。

迁移训练(migration training)

把本章技能迁移到 LinuxMac

环节WindowsLinuxMac
安装git-scm.com 安装器(本机 2.53.0)sudo apt install gitHomebrew:brew install git 或 Xcode 命令行工具
命令一致一致一致
差异换行符 CRLF、路径 \换行符 LF、路径 /同 Linux

不变的:四区模型、全部 git 命令、.git 目录结构;要改的:安装方式与换行符行为。

内容来源映射

内容部分资料位置标记说明
版本控制意义、Git 分布式模型、四区模型、快照与 SHA-1第一阶段讲义1.1/1.3 节来源正文在原资料基础上重新组织表述,未大段复制原文
默认分支名 main 与 SHA-256 迁移说明第一阶段讲义1.1/1.3 节更新原资料按当时 git 版本讲解(默认 master、仅 SHA-1);正文补充"新版默认 main、git 2.29+ 试验性 SHA-256 仓库格式",核心原理表述不变
安装验证命令清单、本机实验、通俗解释(快递仓库类比)补充原资料无三平台安装验证清单;命令清单与全部输出为本机实测(git 2.53.0 / Windows 11)
小练习 / 章节测验 / 实践任务 / 面试问题 / 延伸阅读补充原资料该章无成体系练习,全部新编