Git 基础概念

本节定位
这一节先帮你理解为什么代码需要版本管理。你会从“文件命名地狱”“改坏了回不去”“多人协作困难”这些真实痛点出发,建立对仓库、暂存区、提交和分支的基本认识。
学习目标
- 理解为什么需要版本管理(通过真实的痛点场景)
- 掌握 Git 的四个核心概念:仓库、暂存区、提交、分支
- 完成 Git 的安装和初始配置
没有 Git 的世界
在学 Git 之前,先看看没有 Git 的时候,开发者是怎么管 理代码的:
痛点一:文件命名地狱
你写了一个 AI 模型训练脚本,不断修改、不断保存:
train.py
train_v2.py
train_v2_final.py
train_v2_final_真的最终版.py
train_v2_final_真的最终版_改了bug.py
train_v2_final_真的最终版_改了bug_老板说再改改.py
一周后你想回到"第一次改 bug 之前"的版本——到底是哪个文件?
痛点二:改坏了回不去
你兴冲冲地重构了 model.py,改了 200 行代码。运行——报错了。再改——更多错误。你想恢复到改之前的样子,但你已经 Ctrl+S 保存了无数次,回不去了。
痛点三:多人协作是灾难
你和同事同时在改同一个文件。你改了前半部分,他改了后半部分。你们各自保存,然后用微信互传文件。谁来合并?怎么合并?万一覆盖了对方的修改怎么办?
Git 解决的就是这三个问题:
| 痛点 | Git 怎么解决 |
|---|---|
| 文件命名地狱 | 每次修改自动记录版本,不需要手动重命名 |
| 改坏了回不去 | 任何时候都可以回退到之前的任意版本 |
| 多人协作困难 | 每个人在自己的分支上工作,最后自动合并 |
Git 是什么?
一句话:Git 是一个代码版本管理工具。 它帮你记录代码的每一次修改,让你可以随时查看历史、回退版本、与他人协作。
几个关键点:
- Git 是免费开源的
- Git 是本地工具——不联网也能用(GitHub 是 Git 的在线托管服务,不是 Git 本身)
- Git 是行业标准——几乎所有软件公司、所有开源项目都用 Git
- Git 由 Linux 之父 Linus Torvalds 在 2005 年创造
Git 的四个核心概念
把 Git 想象成一个智能存档系统。你在玩一个大型游戏(写代码),Git 帮你随时存档、读档。
概念一:仓库(Repository)
仓库 = 一个被 Git 管理的项目文件夹。
普通文件夹和 Git 仓库的区别,就像普通笔记本和一个带有"所有修改记录"的魔法笔记本。
# 把一个普通文件夹变成 Git 仓库
cd my-project
git init
执行 git init 之后,文件夹里会多出一个隐藏的 .git 目录,这就是 Git 存放所有版本记录的地方。你不需要打开它,知道它在就行。
概念二:暂存区(Staging Area)
这是 Git 最独特的设计。暂存区是一个"准备提交"的中间地带。
用搬家来类比:
- 你房间里有很多东西(工作目录 —— 你正在修改的文件)
- 你选了一些要搬走的东西放到门口(暂存区 —— 你选好的、准备记录的文件)
- 搬家公司来了,把门口的东西装车运走(提交 —— 正式记录这次修改)
# 你修改了 3 个文件:model.py、train.py、notes.txt
# 只把 model.py 和 train.py 放到"门口"(暂存区)
git add model.py train.py
# notes.txt 还留在"房间里",这次不提交它
为什么需要暂存区?因为你可能同时改了 5 个文件,但这次只想记录其中 2 个文件的修改。暂存区让你能精确控制每次提交包含哪些变更。
概念三:提交(Commit)
提交 = 一次正式的版本记录。 就像游戏里的存档点。
每次提交包含:
- 哪些文件被修改了
- 具体改了什么(哪一行加了什么、删了什么)
- 什么时候提交的
- 谁提交的
- 一段描述信息(说明这次改了什么)
git commit -m "修复了模型训练时学习率过大的 bug"
-m 后面的引号里是提交信息,用来说明这次修改做了什么。好的提交信息应该让别人(包括未来的你)一看就知道这次改了什么。
一个项目的提交历史看起来像这样:
提交 #5: "添加数据增强功能" ← 最新
提交 #4: "修复了模型训练时学习率过大的 bug"
提交 #3: "添加了 CNN 模型定义"
提交 #2: "完成数据加载模块"
提交 #1: "项目初始化,添加 README" ← 最早
你可以随时回到任何一个提交点,就像游戏读档一样。
概念四:分支(Branch)
分支 = 独立的开发线路。 就像平行宇宙。
想象你的项目是一条主路(main 分支)。你想试一个新功能(比如换一个模型架构),但不确定能不能成功。你不想在主路上动 刀——万一改坏了呢?
这时你可以从主路上"岔出"一条新路(新分支),在新路上随便改。如果成功了,把新路合并回主路;如果失败了,直接删掉新路,主路完全不受影响。
main分支: ● ─── ● ─── ● ─── ● ─── ● (稳定的代码)
\ ↗
feature分支: ● ─── ● (尝试新功能)
分支在后面的章节会详细讲,现在只需要知道它的存在。
完整工作流程(先看全貌)
用 Git 管理代码的完整流程是这样的:
你修改了文件 → 选择要记录的文件(add) → 正式 记录(commit) → 推送到云端(push)
工作目录 暂存区 本地仓库 远程仓库(GitHub)
用一个具体的例子:
# 1. 你写了一个新的模型文件
# (这时候文件在"工作目录",Git 知道你改了东西,但还没记录)
# 2. 把它放入暂存区
git add model.py
# 3. 正式提交(记录这次修改)
git commit -m "添加 ResNet 模型定义"
# 4. 推送到 GitHub(让云端也有这份记录)
git push
安装 Git
macOS
# 方法1:用 Homebrew(推荐)
brew install git
# 方法2:直接在终端输入 git,macOS 会提示你安装 Xcode Command Line Tools
git --version
Ubuntu / Debian
sudo apt update
sudo apt install git
Windows
# 用 winget
winget install Git.Git
# 安装后重启终端,然后验证
git --version
也可以从 git-scm.com 下载安装包。安装时一路默认即可。
验证安装
git --version
# 输出类似: git version 2.43.0
看到版本号就说明安装成功了。
初始配置
安装完 Git 后,需要告诉它你是谁。这些信息会出现在每次提交的记录里。
# 设置你的名字(用英文,这会显示在 GitHub 上)
git config --global user.name "Zhang San"
# 设置你的邮箱(建议用 GitHub 注册的同一个邮箱)
git config --global user.email "[email protected]"
# 设置默认分支名为 main(新版 Git 的标准)
git config --global init.defaultBranch main
# 查看配置,确认设置成功
git config --list
--global 表示这是全局配置,对你电脑上所有 Git 仓库生效。如果某个项目需要不同的配置(比如公司项目用公司邮箱),可以在那个项目里不加 --global 单独设置。
小试一下
现在我们来创建你的第一个 Git 仓库,感受一下完整流程:
# 创建一个新项目
mkdir my-first-repo
cd my-first-repo
# 初始化 Git 仓库
git init
# 输出: Initialized empty Git repository in .../my-first-repo/.git/
# 创建一个文件
echo "# 我的第一个 Git 仓库" > README.md
echo "print('Hello Git!')" > hello.py
# 查看状态——Git 会告诉你哪些文件有变化
git status
# 会看到 README.md 和 hello.py 显示为红色(未跟踪的文件)
# 把文件添加到暂存区
git add .
# "." 表示当前目录下所有文件
# 再看状态——文件变成了绿色(已暂存,准备提交)
git status
# 提交!
git commit -m "项目初始化:添加 README 和 hello.py"
# 输出: [main (root-commit) abc1234] 项目初始化:添加 README 和 hello.py
# 查看提交历史
git log --oneline
# 输出: abc1234 项目初始化:添加 README 和 hello.py
恭喜你,你的第一次 Git 提交完成了!
现在试着修改一下文件,再提交一次:
# 修改 hello.py
echo "print('Hello Git! I am learning AI.')" > hello.py
# 查看改了什么
git diff
# 会用红色/绿色高亮显示你的修改
# 添加并提交
git add hello.py
git commit -m "更新问候语"
# 查看历史——现在有两条记录了
git log --oneline
# 输出:
# def5678 更 新问候语
# abc1234 项目初始化:添加 README 和 hello.py
两次提交,两个存档点。随时可以回到任何一个。
小结
| 概念 | 一句话解释 | 类比 |
|---|---|---|
| 仓库 | 被 Git 管理的项目文件夹 | 一个有"撤销历史"的魔法笔记本 |
| 暂存区 | 准备提交的中间地带 | 搬家时放在门口待装车的东西 |
| 提交 | 一次正式的版本记录 | 游戏存档 |
| 分支 | 独立的开发线路 | 平行宇宙 |
| 工作目录 | 你正在编辑的文件 | 你正在写的草稿 |
Git 的工作流程就三步: