Miron Chen
教程

Git 101 - 基础知识

Cover Image for 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 的文件夹,并进入该文件夹。

答案在下一章节中