Git 101 - 基础知识

1. 什么是 Git?
在我们开始学习之前,我们需要先知道 Git 是什么,它是做什么的。
Git 是一种 版本控制系统(Version Control System,VCS)。它可以记录文件在不同时间点的变化,让我们能够查看历史版本、恢复旧版本,并且和其他人协作开发。作为教程的开篇,我们将不会考虑协作开发的部分,我们将在较后的章节中讨论。
1.1 什么是版本控制?
假设你正在写一个程序。
一开始,你的项目可能叫:
project
修改了一次之后,你担心新版本出问题,于是复制了一份:
project_v2
过了一段时间以后:
project
project_v2
project_final
project_final_v2
project_final_really_final
这种方法虽然看起来可以保存历史版本,但很快就会出现几个问题:
- 不知道不同版本之间到底修改了什么
- 文件越来越多,占用大量空间
- 很难确定哪个才是最新版本
- 多人协作时很容易互相覆盖文件
- 如果只想恢复某一次修改,会非常麻烦
Git 就是为了解决这些问题而设计的。
使用 Git 后,我们通常只保留一份项目文件,而 Git 会帮助我们记录每一次重要修改。
例如:
Initial project
↓
Add login page
↓
Fix login bug
↓
Add user profile
每一个时间点都可以被 Git 保存下来。
如果后来发现:
Add user profile
这一版本出现了严重问题,我们仍然可以查看甚至恢复之前的版本。
如果你不是专业的开发者(Developer),而你又想尝试氛围编程(Vibe Coding),那学会使用 Git 将至关重要:
- AI 幻觉(hallucination)可能会错误地修改一些地方
- 你不小心修改了某个地方,而你又不记得是哪里了
- AI 进行了大量修改,但你想要回退到某个地方
尽管当前大多数 Agentic Coding 工具都提供了一键撤回(Undo)功能,但依然无法保证每次执行都不会产生令人意想不到的副作用。正确使用 Git 工具将很可能把你从迫在眉睫的 Deadline 和崩溃(Crash)的程序中拯救出来(至少跑起来)。
1.2 Git 会记录什么?
Git 主要记录的是项目中的变化。
例如一个文件原本是:
Hello
后来修改成:
Hello Git
Git 可以知道:
-Hello
+Hello Git
也就是说,Git 不只是简单地保存很多份文件副本,而是帮助我们管理项目的版本变化。
这些被保存下来的版本通常称为:
Commit(提交)
可以简单理解为:
Commit 就是给当前项目状态创建一个“存档点”。
例如:
Commit 1
Create project
Commit 2
Add login page
Commit 3
Fix login bug
以后我们会详细学习如何创建 Commit。
1.3 GitHub 和 Git 有什么关系?
简单来说,Git 和 GitHub 并不是同一个东西。
Git 是版本控制工具,由 Linux 的创建者 Linus Torvalds 在 2005 年开发。它最初是为了更高效地管理 Linux 内核这样的大型开源项目。
GitHub 则是在 2008 年上线的 Git 仓库托管平台。它建立在 Git 之上,为开发者提供代码托管、Pull Request、Issue、团队协作等功能。
即使没有 GitHub,也可以在自己的电脑上正常使用 Git。
类似 GitHub 的平台还有:
- GitLab
- Bitbucket
- Azure DevOps
1.4 一些关于 Git 的名词
Repository(Repo)
学习 Git 时,你会经常看到 Repository 这个词,通常我们简称它为 Repo。中文通常称之为 仓库。Git Repository 就是一个被 Git 管理的项目,在大多数情况下,你可以简单理解成装着代码的那个项目文件夹(但并不是完全准确的理解)。
例如:
my-project/
├── index.html
├── style.css
├── script.js
└── .git/
其中 .git/ 是 Git 用来保存版本历史和仓库信息的特殊目录。
Commit
项目的一个版本记录,可以理解为“存档点”。
Commit A
↓
Commit B
↓
Commit C
如果因为某些原因你需要撤销某次提交带来的修改,可以使用 git revert。它会创建一个新的提交来抵消指定提交的变化,而不会删除原来的提交历史,因此 Commit C 仍然可以查看。恢复到某个历史版本和撤销某次提交是不同的操作,我们将在后面的章节中详细学习。
Branch
Branch 中文通常称作 分支。它允许我们从当前项目中创建一条独立的开发线,并在其中修改代码,而不会立即影响其他分支。
例如:
main
│
├── feature-login
│
└── feature-search
feature-login 可以修改登录功能,feature-search 可以修改搜索功能。
两个分支之间的修改不会自动影响对方,main 也不会跟着改变。
只有之后主动进行合并(merge),某个分支的修改才会进入另一个分支。
Branch 的核心作用,就是让不同的开发工作暂时互相独立。
因此,可以先把 Branch 理解成:
一份独立的开发路线。你可以在其中放心修改代码,而不会立即影响其他分支。
Remote
Remote 指远程 Git 仓库,例如 GitHub 上的 Repository。
Local Repository
↕
Remote Repository
2. 命令行基础
由于操作系统和版本的不同,安装 Git 的流程也会有所不同,因此本文将不会包括 Git 的安装教程。在这个部分,我们将介绍一些非常常用的基础命令。
Git 经常通过命令行(command line)使用。
如果你之前没有接触过 Terminal、PowerShell 或 Linux 命令,也不用担心。学习 Git 前,我们只需要掌握几个最基础的命令。
2.1 什么是命令行?
命令行可以理解为:
通过输入文字命令来操作电脑。
例如,在 macOS 或 Linux 中打开 Terminal,可能会看到:
user@computer ~ %
Windows 中则可能使用 PowerShell。
之后我们会在这里输入 Git 命令。
2.2 查看当前所在位置:pwd
pwd 的意思是:
Print Working Directory
它会显示你当前所在的文件夹。
例如:
pwd
可能得到:
/Users/alex
表示目前位于用户目录中。
在 macOS 下,新打开的终端(Terminal)通常位于当前用户的主目录,例如 /Users/alex,也可以用 ~ 表示。具体位置可能因终端设置而不同,可以使用 pwd 确认。
2.3 查看文件:ls
使用:
ls
可以查看当前目录中的文件和文件夹。
例如:
Desktop
Documents
Downloads
Projects
可以把它理解成命令行版本的“打开文件夹查看内容”。
2.4 进入文件夹:cd
cd 是:
Change Directory
也就是切换当前所在的文件夹。
例如:
cd Documents
表示进入 Documents 文件夹。
如果里面还有一个 Projects 文件夹:
cd Projects
现在的位置就变成:
Documents/Projects
也可以一次进入多层目录:
cd Documents/Projects
返回上一级目录
使用:
cd ..
例如:
Documents/Projects
执行:
cd ..
之后会回到:
Documents
这里的:
..
表示“上一级目录”。
2.5 创建文件夹:mkdir
mkdir 表示:
Make Directory
例如:
mkdir git-tutorial
会创建一个叫:
git-tutorial
的文件夹。
然后可以进入它:
cd git-tutorial
2.6 清空终端:clear
如果终端中的内容太多,可以使用:
clear
清空当前屏幕。
它不会删除文件,也不会删除之前执行过的命令。
2.7 练习
在桌面(desktop)文件夹中创建一个名为 hello_world 的文件夹,并进入该文件夹。
答案在下一章节中