主题
Git 介绍与Git 准备工作(Day4 3/4)
本页对应 Day04_ES6&Git,共 6 段视频,约 1 小时 0 分。
学习目标
- 能区分对象封闭与冻结的差异,并使用
Object.seal()、Object.freeze()及对应判断方法演示属性增删改查行为。 - 能说明 Git 作为分布式版本控制系统的作用与发展特点,并复述代码备份、版本回退、协作开发、权限控制等核心价值。
- 能独立完成 Git 安装,并通过打开 Git Bash 命令行窗口验证安装成功。
- 能正确使用
ls、cd、rm、clear等常用 Linux 命令完成目录查看、切换、删除与清屏操作。 - 能使用 Tab 补全、Ctrl+L、Ctrl+C、上下方向键等命令行快捷键提高操作效率。
- 能使用 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. 封闭对象: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 |
| 2 | Git的介绍 | 23:04 |
| 3 | Git安装 | 07:27 |
| 4 | 常用Linux命令 | 11:51 |
| 5 | 命令行常用快捷键 | 02:52 |
| 6 | vim的简单使用 | 08:15 |
小结
- Git 在 Windows 上没有桌面图标,右键菜单里的
Git Bash Here就是它的正确入口,能弹出黑窗口即安装成功,这一点先记死。 - 命令行的第一性原理是"当前目录"——所有操作都只对当前目录生效,打开位置错了,后面敲什么都白搭。
ls/cd/rm/clear这四个命令 +Tab补全 +Ctrl+C/Ctrl+L/ 上下键,构成后续所有 Git 操作的地基,不必贪多。vim对这门课的价值不是"写代码",而是冲突时能被打开、能被看懂、能被退出去,:wq和:q!会了就够用。rm -rf属于"会用但少用"的命令,它的破坏是不可逆的,养成敲回车前再读一遍命令的习惯。- Git 是分布式的:版本库在每台机器本地都有一份完整的,服务器只负责同步,这决定了"断网也能回退版本"和"服务器挂了代码仍在"。
- 团队协作的三个真实痛点——代码备份、版本回退、多人合并与权限——正是后面课程要一个个用命令解决的对象,学 Git 不是背命令,是解决这三件事。
- 先命令行、后图形界面,顺序不能反;命令是原理,界面只是外壳。