Skip to content

Git 介绍与Git 准备工作(Day4 3/4) ​

本页对应 Day04_ES6&Git,共 6 段视频,约 1 小时 0 分。

学习目标 ​

  1. 能区分对象封闭与冻结的差异,并使用 Object.seal()、Object.freeze() 及对应判断方法演示属性增删改查行为。
  2. 能说明 Git 作为分布式版本控制系统的作用与发展特点,并复述代码备份、版本回退、协作开发、权限控制等核心价值。
  3. 能独立完成 Git 安装,并通过打开 Git Bash 命令行窗口验证安装成功。
  4. 能正确使用 ls、cd、rm、clear 等常用 Linux 命令完成目录查看、切换、删除与清屏操作。
  5. 能使用 Tab 补全、Ctrl+L、Ctrl+C、上下方向键等命令行快捷键提高操作效率。
  6. 能使用 Vim 打开文件,在命令模式、输入模式、底线命令模式之间切换,并完成保存、退出及强制退出操作。

知识点 ​

Git 是什么:先弄清“版本控制” ​

为什么需要:写代码时很容易出现“改着改着把原来能运行的代码改废了”“误删了找不回来”“几个人改同一处不知道听谁的”等问题,所以需要一个工具帮我们记录历史、管理变化。
怎么想:Git 是一款开源免费的分布式版本控制系统,由 Linux 之父 Linus Torvalds(林纳斯·托瓦兹)为方便管理 Linux 代码而开发,诞生于 2005 年,是目前最流行的版本控制系统。这里要抓住三个关键词:开源免费、分布式、版本控制。
怎么做:先建立整体认识:Git 不是网盘,也不是 QQ 传文件,而是把代码的每次变化记录到版本库中,需要时能查看、回退、合并。下载地址是 https://git-scm.com/,官方文档是 https://git-scm.com/book/zh/v2。
易错点:不要把 Git 只理解成“备份当前文件”;它备份的是版本历史。也不要把“分布式”理解成“不需要服务器”,后面会看到服务器主要承担同步作用。

为什么需要版本控制:四个核心功能 ​

为什么需要:项目开发中,代码备份、版本回退、多人协作、权限控制都是绕不开的需求。转写稿里举的例子很典型:代码能正常运行时想加新功能,结果新功能没加成功,原来的代码也被改坏;如果一个项目改了几十个文件,靠手动恢复几乎不可能。
怎么想:版本控制系统能记录版本,所以可以回到指定版本;多人开发时能把代码合并到一块;团队里不同成员应有不同权限,避免误改别人负责的部分。
怎么做:把四个功能对应到实际动作:代码备份——提交到版本库;版本回退——回到某个历史版本;多人协作——通过远程仓库同步、合并,冲突有解决机制;权限控制——按成员分配可操作范围。
易错点:手动 Ctrl+C、Ctrl+V 或拷到 U 盘也能“备份”,但版本一多、文件一多就非常累,而且冲突难处理;权限控制也不是“防物理攻击”,机房、电脑被破坏属于另一类问题。

从本地到集中式再到分布式:Git 为什么要这样设计 ​

为什么需要:早期程序员常常单打独斗,本地版本控制只解决自己的备份和回退;后来项目变大、多人参与,就需要协同开发,于是出现集中式版本控制系统,如 SVN。
怎么想:集中式系统需要一台服务器,每个人装客户端,把代码同步到服务器,也从服务器下载最新代码;缺点是太依赖服务器,服务器坏了或连不上,本地想单纯回退都不方便。Git 是分布式版本控制系统,每个节点都有完整版本库,服务器更多是“同步中间商”。
怎么做:理解 Git 网络中的节点是平等的:你本地有完整记录,所以不连服务器也能回退;需要多人协作时,再用远程仓库帮助大家同步。
易错点:分布式不是“不要服务器”,而是服务器不再唯一保存全部历史;集中式服务器坏了影响很大,Git 则因为每人本地有完整版本库而更安全。开源也不等于随便侵权,它指源码免费开放、可查看、可参与贡献。

下载安装:把 Git 工具跑起来 ​

为什么需要:了解概念后要先把工具装好,否则后面的命令无法练习。
怎么想:Windows 一般下载安装包,按默认选项一路下一步即可;macOS 通常自带,具体以官网说明为准。安装路径建议不要出现中文。
怎么做:打开 https://git-scm.com/ 下载对应系统版本;安装完成后,桌面不一定有快捷方式,常见用法是在文件夹空白处右键,选择“Git Bash Here”,能打开一个命令行黑框就说明工具可用。
易错点:不要因为桌面没有图标就以为没装好;安装选项看不懂时保持默认通常能满足需求;不要随意改不认识的配置。

初识命令行:后续操作都基于“当前目录” ​

为什么需要:Git Bash 是命令行工具,后续 Git 操作常在某个项目目录里进行,必须先知道“当前目录”在哪里。
怎么想:命令行打开后显示的路径就是当前所在目录,所有操作都基于它。常用命令有 ls 查看当前目录下的文件和子目录,cd 切换目录,cd .. 回上一级,clear 清屏;删除命令 rm 要慎用。快捷键方面,Tab 可补全路径,Ctrl+L 清屏,Ctrl+C 中断当前程序,上下键调出历史命令。
怎么做:在项目文件夹右键打开 Git Bash Here,用 ls 确认内容,用 cd 进入目标目录;遇到 Git 冲突记录可能默认用 Vim 打开,先别慌,按 Esc 回到命令模式,再输入 :wq 保存退出,或 :q! 强制退出。
易错点:不要乱试 rm -rf / 这类删除命令;Vim 打开后直接敲字可能没反应,是因为它默认在命令模式,需要按 i 进入输入模式;退出不了时用 Esc 加 :q! 处理。

前置复习:封闭对象与冻结对象 ​

本节开头先用对象属性控制做复习,再进入 Git 准备工作。为什么需要:理解“封闭/冻结”能帮助我们知道对象属性何时可增、可删、可改。怎么想:把对象想成一组属性;Object.seal 只限制“增”和“配置”,Object.freeze 连“改”也限制。怎么做:

js
let arr = [1, 2, 3, 4, 5];
arr.name = "数组";
arr.address = "北京";

Object.seal(arr);
console.log(Object.isSealed(arr)); // true
console.log(Object.isFrozen(arr)); // false

arr[0] = 250;        // 可改
arr.address = "上海"; // 可改
arr.a = 1;           // 加不上
delete arr.name;     // 删不掉

冻结则更严格:

js
Object.freeze(arr);
console.log(Object.isSealed(arr)); // true
console.log(Object.isFrozen(arr)); // true

arr[0] = 250;        // 改不掉
arr.a = 1;           // 加不上
delete arr.name;     // 删不掉

易错点:seal 后原有可写属性仍可修改;freeze 包含 seal 的效果;两者都不影响读取。真正业务代码很少直接使用,多见于底层框架。

为什么需要 Git ​

为什么需要:开发中要解决代码备份、版本回退、协作开发、权限控制。代码误删、功能改废、多人改同一处都可能发生。怎么想:本地版本控制只能自己管自己;集中式版本控制如 SVN 依赖服务器,回退也要连服务器;Git 是分布式版本控制,每个人电脑上都有完整版本库,服务器主要承担同步作用。怎么做:把 Git 当作程序员必备工具,先安装,再学命令行。易错点:不要以为 Git 回退必须联网;也不要以为服务器坏了代码就没了,分布式下本地仍有完整记录。

安装 Git ​

为什么需要:后面所有命令都依赖 Git 环境。怎么想:Windows 下载安装包,路径尽量不要有中文;macOS 通常自带;Linux 可用包管理器安装。怎么做:Windows 下双击安装,多数选项默认即可。安装成功后桌面通常没有快捷方式,而是在文件夹空白处右键,能看到 Git Bash Here。打开后出现命令行窗口即表示可用。易错点:不要死记安装选项;能打开 Git Bash 就说明基本安装成功。图形界面工具不是必须,先学命令行。

命令行当前目录与常用命令 ​

为什么需要:Git Bash 打开后一定位于某个目录,所有操作都基于“当前目录”。怎么想:先看路径,再操作文件。怎么做:

bash
ls          # 列出当前目录下的文件和子目录
ls -a       # 列出所有项目,包括隐藏项
ls -l       # 以详细列表显示
ls -al      # 合并选项
cd 课堂案例  # 进入当前目录下的子目录
cd ..       # 返回上一级目录
rm -rf 课堂案例-副本  # 强制递归删除,慎用
clear       # 清屏

易错点:rm -rf 很危险,不要乱试;删除目录时 -r 表示递归,-f 表示不再逐条确认。Windows 下盘符之间相对隔离,但也不要拿危险命令练手。

命令行常用快捷键 ​

为什么需要:提高命令行操作效率。怎么想:补全、清屏、中断、调历史是高频动作。怎么做:Tab 自动补全路径;Ctrl + L 清屏,作用等同 clear;Ctrl + C 终止当前正在执行的命令;键盘上下键调出历史命令。易错点:Ctrl + C 是中断程序,不是复制;路径补全时要注意当前目录。

Vim 的最低限度用法 ​

为什么需要:Git 处理冲突时可能默认用 Vim 打开记录,至少要会看、会退出。怎么想:Vim 有三种常用模式:命令模式、输入模式、底线命令模式。打开文件默认在命令模式;按 i 进入输入模式;按 Esc 回命令模式;按 : 进入底线命令模式。怎么做:

bash
vim test.txt

进入后按 i 编辑,按 Esc 回命令模式,再输入:

vim
:w    " 保存
:q    " 退出
:wq   " 保存并退出
:q!   " 强制退出

易错点:输入法要是英文,否则冒号可能无效;Vim 里不能用 Ctrl + S 保存;退不出去时用 :q!。掌握这些就够应对 Git 准备阶段。

封闭对象与冻结对象:转写稿开头的回顾 ​

转写稿开头先回顾了 Object.seal 与 Object.freeze,再进入 Git 主线。这里保留其代码结论,便于对照。

为什么需要:要限制对象被随意增删改,避免底层框架中的配置对象被误改。
怎么想:把对象想成账户:封闭是“不能新开账户、旧账户不能改配置”,冻结是“连余额也不能改”。
怎么做:

js
let arr = [12, 13, 40, 50];
arr.name = "张三";
arr.address = "北京";

Object.seal(arr);
Object.isSealed(arr); // true
Object.isFrozen(arr); // false
// arr.push(60) 加不上;delete arr.name 删不掉;arr[0] = 250 可改

Object.freeze(arr);
Object.isSealed(arr); // true
Object.isFrozen(arr); // true
// arr[0] = 250 无效;delete arr.name 无效;读取仍可

易错点:封闭后现有属性“不可配置”,但原本可写的属性仍可改;冻结更严格,旧属性也不可写。冻结包含封闭,isSealed 也会为 true。

版本控制系统解决什么问题 ​

为什么需要:代码可能误删;加功能失败可能把原代码改废;多人开发要合并代码;团队需要权限控制。
怎么想:版本控制系统不是“网盘”,而是记录版本、支持回退、支持协作和权限管理的工具。转写稿强调四个作用:代码备份、版本回退、协作开发、权限控制。
怎么做:写代码前纳入版本库;改坏了回退到指定版本;多人改动通过系统合并,冲突按成熟步骤解决;给不同开发者分配不同权限。
易错点:手动 Ctrl+C、Ctrl+V 备份也能做,但文件一多几乎无法准确恢复;不要等代码废了才想起版本库。

集中式与分布式:Git 的定位 ​

为什么需要:早期本地版本控制只能自己管自己;集中式如 SVN 需要服务器,离线时连版本回退都困难。
怎么想:集中式的记录主要在服务器;分布式的每个节点都有完整版本库,服务器主要做同步中间商。Git 由 Linux 之父 Linus 于 2005 年为管理 Linux 代码而开发,开源免费。
怎么做:理解 Git 时抓住“分布式”:本地有完整记录,所以回退不必连服务器;多人协作时仍需要一台服务器/远程仓库帮助同步。
易错点:转写稿里的“get”应写 Git,“SUV”应写 SVN,“linkick”应写 Linux。Git 不是只能联网才能回退;但协作同步仍依赖远程节点。

Git 安装与打开方式 ​

为什么需要:Windows 通常需安装 Git;macOS 转写稿说一般自带,可用命令行工具。
怎么想:安装目标不是桌面图标,而是获得 Git 命令行环境。
怎么做:下载对应系统安装包,Windows 双击安装,路径避免中文,转写稿演示中大部分选项保持默认一路下一步;若出现“记住用户名”等选项可勾选。安装后桌面不一定有快捷方式,在文件夹右键选择 Git Bash Here,能打开黑框即成功。
易错点:转写稿里“inst”是 install;安装选项会随版本变化,不必强行照抄;窗口字体和尺寸可在 Options 中调整。

命令行基础:当前目录、ls、cd、rm、clear ​

为什么需要:Git Bash 打开后一定位于某个“当前目录”,后续操作都基于它。
怎么想:命令结构是“命令名 + 选项 + 路径”。先确认在哪,再切换、查看、删除。
怎么做:

bash
ls          # 列出当前目录文件和子目录
ls -a       # 包含隐藏项
ls -l       # 详细信息
ls -al      # 合并选项
cd 目录名   # 进入目录
cd ..       # 返回上一级
rm -rf 文件或目录  # 递归强制删除,慎用
clear       # 清屏

转写稿演示了 cd 课堂案例、cd ..、rm -rf 课堂案例-副本,以及 clear 清屏。
易错点:rm -rf / 极其危险;Windows 盘符之间相对隔离,但仍不要乱试。转写稿里的“controrl”应为 Ctrl,“cli/colli”应为 clear。

快捷键与 Vim:够用即可 ​

为什么需要:命令行操作频繁,快捷键能提效;Git 冲突时可能默认用 Vim 打开冲突记录,不会退出会卡住。
怎么想:Vim 有三种模式:打开是命令模式;按 i 进输入模式;按 Esc 回命令模式;按 : 进底线命令模式。
怎么做:

bash
vim test.txt
# 命令模式按 i 输入;Esc 回命令模式;:w 保存;:q 退出;:wq 保存并退出;:q! 强制退出

快捷键:Tab 补全路径;Ctrl+L 清屏,等同 clear;Ctrl+C 中断当前程序;上下键调历史命令。
易错点:Vim 里不能直接 Ctrl+S 保存;冒号要用英文输入法;转写稿里的“VRM”应写 Vim,“table”应写 Tab。

课堂画面 ​

课堂画面 1

课堂画面 2

课堂画面 3

课堂画面 4

课堂画面 5

课堂画面 6

代码示例 ​

1. 封闭对象:Object.seal() ​

js
// ① 先准备一个对象(数组本身就是对象,元素也是属性)
const arr = [12, 13, 40, 50];
arr.address = '北京';
arr.name = '张三';

// ② 封闭对象
Object.seal(arr);

console.log(Object.isSealed(arr)); // true  已封闭
console.log(Object.isFrozen(arr)); // false 只是封闭,没有冻结

console.log(arr); // [12, 13, 40, 50, address: '北京', name: '张三']

// ③ 封闭后:不能添加新属性
arr.a = 1;
console.log(arr.a); // undefined

// ④ 封闭后:旧属性不可配置 —— delete 删不掉
delete arr.name;
console.log(arr.name); // '张三'

// ⑤ 封闭后:原来的可写属性仍然可以修改
arr[0] = 250;
arr.address = '上海';
console.log(arr[0], arr.address); // 250 '上海'

// ⑥ 读取当然也没问题
console.log(arr[1]); // 13

关键行与易错点

  • Object.seal(arr) 不需要接收返回值,arr 会被就地封闭;用 Object.isSealed() 验证状态。
  • 封闭只做两件事:阻止添加新属性 + 把所有现有属性标记为不可配置(delete 删不掉、属性特性改不了)。
  • 最容易错的一点:封闭不等于冻结,原有属性只要还是可写的,arr[0] = 250、arr.address = '上海' 照样能改。
  • 在非严格模式下,添加属性、删除属性会静默失败(不报错,也不生效);如果代码处于严格模式(如 ES Module),同样的操作会直接抛 TypeError,不要误以为“代码没跑”。

2. 冻结对象:Object.freeze() ​

js
const arr = [12, 13, 40, 50];
arr.address = '北京';
arr.name = '张三';

// ① 冻结对象
Object.freeze(arr);

// ② 冻结是“更狠”的处理:包含封闭
console.log(Object.isSealed(arr)); // true
console.log(Object.isFrozen(arr)); // true

// ③ 不能添加
arr.a = 1;
console.log(arr.a); // undefined

// ④ 不能删除
delete arr.name;
console.log(arr.name); // '张三'

// ⑤ 也不能修改(这是和封闭最大的区别)
arr[0] = 250;
arr.address = '上海';
console.log(arr[0], arr.address); // 12 '北京'

// ⑥ 但读取依然可以
console.log(arr[1]); // 13

关键行与易错点

  • 冻结之后 Object.isSealed() 和 Object.isFrozen() 都是 true,说明冻结在封闭的基础上又加了一条:旧属性也不可写。
  • 对比记忆:封闭 = 不能加、不能删;冻结 = 不能加、不能删、不能改。两者都能读。
  • 冻结/封闭是底层原理级的操作,日常业务代码基本用不到,通常出现在框架、库这类底层代码里。
  • 注意 Object.freeze() 是浅冻结,只作用于对象自身这一层(转写稿中演示的都是单层数组,未涉及嵌套)。

3. 完整可运行的 HTML 页面(对比两种操作的结果) ​

html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <title>封闭对象与冻结对象</title>
  <style>
    body { font-family: Consolas, Monaco, monospace; padding: 20px; }
    h3 { margin-bottom: 6px; }
    pre { background: #f5f5f5; padding: 10px; border-left: 4px solid #42b983; }
  </style>
</head>
<body>
  <h3>封闭对象 Object.seal()</h3>
  <pre id="seal"></pre>

  <h3>冻结对象 Object.freeze()</h3>
  <pre id="freeze"></pre>

  <script>
    // 简单的输出函数,把结果写到对应的 pre 里
    function log(id, ...args) {
      document.getElementById(id).textContent += args.join(' ') + '\n';
    }

    /* ---------- 封闭 ---------- */
    const a1 = [12, 13, 40, 50];
    a1.address = '北京';
    a1.name = '张三';

    Object.seal(a1);

    log('seal', 'isSealed =', Object.isSealed(a1), '| isFrozen =', Object.isFrozen(a1));

    a1.a = 1;                       // 加新属性
    log('seal', '加新属性后 a1.a =', a1.a);

    delete a1.name;                 // 删旧属性
    log('seal', 'delete 后 a1.name =', a1.name);

    a1[0] = 250;                    // 改原有属性
    a1.address = '上海';
    log('seal', '修改后 a1[0] =', a1[0], '| a1.address =', a1.address);

    /* ---------- 冻结 ---------- */
    const a2 = [12, 13, 40, 50];
    a2.address = '北京';
    a2.name = '张三';

    Object.freeze(a2);

    log('freeze', 'isSealed =', Object.isSealed(a2), '| isFrozen =', Object.isFrozen(a2));

    a2.a = 1;
    log('freeze', '加新属性后 a2.a =', a2.a);

    delete a2.name;
    log('freeze', 'delete 后 a2.name =', a2.name);

    a2[0] = 250;
    a2.address = '上海';
    log('freeze', '修改后 a2[0] =', a2[0], '| a2.address =', a2.address);
  </script>
</body>
</html>

关键行与易错点

  • 两段演示用的是两个独立数组 a1、a2;如果复用同一个对象,Object.seal() 之后再 Object.freeze() 的结果就分不清了。
  • delete a1.name 在非严格模式下不报错但也不生效,所以紧接着 log 出来的还是 '张三',这不是代码写错,而是封闭/冻结本身的效果。
  • 输出用 textContent += 累加,避免 innerHTML 反复覆盖已有内容。
  • 页面里 Object.seal() / Object.freeze() 的调用位置在属性添加之后:先给 arr 挂 address、name,再封闭/冻结,否则这些属性根本加不上去。

常见错误 ​

1. 装完 Git 桌面没有图标,判定"没装成功",于是反复重装

  • 现象:安装程序跑完,桌面、开始菜单都找不到可点的 Git 图标,学生以为失败。
  • 原因:Git 在 Windows 上不创建桌面快捷方式,它把入口写进了资源管理器的右键菜单(Git Bash Here / Git GUI Here)。
  • 修法:在任意文件夹空白处右键,能出现 Git Bash Here 并点开一个黑窗口,就是安装成功;后面所有课都以这个黑窗口为工作台。

2. 右键菜单里根本没有 Git Bash Here

  • 现象:右键找不到入口,或只有 Git GUI Here。
  • 原因:安装过程中改了非默认勾选项;安装路径含中文/空格;或安装后资源管理器未刷新。
  • 修法:卸载后重装,安装路径保持纯英文、不带空格,一路默认下一步;装完重启一次资源管理器或重启电脑。

3. 打开了黑窗口,ls 却看不到自己要操作的文件

  • 现象:明明文件就在电脑上,ls 列不出来,cd 课堂案例 报 No such file or directory。
  • 原因:命令行的一切操作只作用于"当前目录",你在哪个文件夹右键打开,它就只在哪个目录里;跨目录必须先切。
  • 修法:先 ls 确认自己在哪,再 cd 目录名 进去、cd .. 回上一级;路径一律用 Tab 补全,别手打,避免中文、全角字符和拼写错误。

4. vim 打开文件后敲键盘没反应,还退不出去

  • 现象:光标能上下左右移动,但打不出字;想关掉又不知道怎么关,只能强行关窗口。
  • 原因:vim 打开即处于命令模式,命令模式不接受文本输入;退出要在底线命令模式执行命令,且必须英文输入法。
  • 修法:i 进入输入模式 → 写完 Esc 回命令模式 → : 进底线命令模式 → :wq 保存退出、:q! 放弃退出。输入法在中文状态时冒号无效,先切英文。

5. 把 rm -rf 当成普通删除,顺手就用

  • 现象:一条 rm -rf 目录名 敲下去,目录连同内容瞬间没了,回收站也找不回。
  • 原因:-r 递归、-f 不再逐条询问确认,两者叠加就是"无提示、连根拔"。
  • 修法:能用系统方式删就别用命令;必须用时先 ls 确认当前目录和名字拼写,命令里永远不要出现根路径;敲完回车前再读一遍。

6. 误以为"关掉黑窗口 = 代码没了",或"服务器挂了 = 项目废了"

  • 现象:关掉 Git Bash 后惊慌,认为刚才的工作白做了;或听说是"分布式"却仍按 SVN 的思维理解。
  • 原因:把命令行窗口当成工作现场,把远程服务器当成唯一仓库。
  • 修法:窗口只是入口,文件真实存在于磁盘目录里,重新在该目录打开即可;Git 的完整版本库在每台机器本地,服务器只承担同步角色。

7. 一上来就找 Git 的图形界面工具,排斥命令行

  • 现象:安装时点 Git GUI Here,后续课上的操作对不上。
  • 原因:觉得黑窗口"高级、难",想绕开。
  • 修法:先用命令行把流程走通,图形界面只是同一套操作的按钮化外壳,命令会了界面自然就会,反之不成立。

练习 ​

练习 1(环境自检) 在 D 盘新建一个纯英文目录(如 D:\git-study),在其中右键打开 Git Bash Here。用 ls 确认当前目录内容,用 cd 进入一个子目录再 cd .. 返回,全程用 Tab 补全路径。最后用 clear 和 Ctrl + L 各清屏一次,用上下方向键调出刚才敲过的命令重新执行。

练习 2(命令对比) 在同一目录下依次执行 ls、ls -a、ls -l、ls -al,把四次输出的差异写下来:哪些是隐藏项、哪些是详细信息、-a 与 -l 合并后是什么效果。

练习 3(vim 全流程) 用 vim test.txt 新建文件,按 i 输入三行文字,Esc 后 :wq 保存退出;重新打开确认内容还在。再打开一次,随便改几个字,用 :q! 不保存退出,重新打开验证内容未被改动。故意在中文输入法下按 :,观察会发生什么,然后切英文重试。

练习 4(删除与风险意识) 把练习 1 里的某个目录复制一份改名为 xxx-copy,用 rm -rf xxx-copy 删除,并用 ls 验证。删除前先在纸上写一句:这条命令如果在根目录执行会有什么后果。

练习 5(概念辨析) 用三句话回答:如果团队那台"服务器"硬盘坏了,用 SVN 和用 Git 分别会发生什么?为什么?并说明"本地有完整版本库"对"我只是想回退一个版本"这件事意味着什么。

原视频对照 ​

#视频时长
1封闭对象和冻结对象07:21
2Git的介绍23:04
3Git安装07:27
4常用Linux命令11:51
5命令行常用快捷键02:52
6vim的简单使用08:15

小结 ​

  1. Git 在 Windows 上没有桌面图标,右键菜单里的 Git Bash Here 就是它的正确入口,能弹出黑窗口即安装成功,这一点先记死。
  2. 命令行的第一性原理是"当前目录"——所有操作都只对当前目录生效,打开位置错了,后面敲什么都白搭。
  3. ls / cd / rm / clear 这四个命令 + Tab 补全 + Ctrl+C / Ctrl+L / 上下键,构成后续所有 Git 操作的地基,不必贪多。
  4. vim 对这门课的价值不是"写代码",而是冲突时能被打开、能被看懂、能被退出去,:wq 和 :q! 会了就够用。
  5. rm -rf 属于"会用但少用"的命令,它的破坏是不可逆的,养成敲回车前再读一遍命令的习惯。
  6. Git 是分布式的:版本库在每台机器本地都有一份完整的,服务器只负责同步,这决定了"断网也能回退版本"和"服务器挂了代码仍在"。
  7. 团队协作的三个真实痛点——代码备份、版本回退、多人合并与权限——正是后面课程要一个个用命令解决的对象,学 Git 不是背命令,是解决这三件事。
  8. 先命令行、后图形界面,顺序不能反;命令是原理,界面只是外壳。