Git 版本控制教程

从零基础到团队协作 —— 掌握必备的版本控制技能

🎯

欢迎来到版本控制的世界

Git 是世界上最流行的版本控制系统,被全球 90% 以上的开发者使用。无论是个人项目还是团队协作,Git 都是必不可少的工具。

🌟

你知道吗? Linux 内核、Google、Microsoft、Facebook 等顶级科技公司的代码都使用 Git 进行管理!

📚

什么是版本控制?

你是否经历过这样的场景:

❌
写了一堆文件:最终版.doc、最终版2.doc、绝对最终版.doc、真的最终版_v3.doc...
❌
不小心删除了重要代码,找不到备份
❌
和同事合作时,互相覆盖对方的代码
❌
想知道某个功能是什么时候加的,谁加的

✨ 版本控制就是解决方案

版本控制系统(Version Control System)可以记录文件的每一次修改,让你随时回到任何历史版本,查看修改记录,轻松与他人协作。

🔧

什么是 Git?

Git 是一个分布式版本控制系统,由 Linux 之父 Linus Torvalds 于 2005 年创建。

🐙 Git

  • 版本控制工具
  • 安装在本地电脑
  • 管理代码历史
  • 可以离线使用

🌐 GitHub / Gitee

  • 代码托管平台
  • 网站服务
  • 存储 Git 仓库
  • 提供协作功能
💡

重要区别: Git 是工具,GitHub/Gitee 是使用 Git 工具的平台。就像 Word 是工具,Google Docs 是使用类似工具的在线平台。

⬇️

安装 Git

首先,我们需要在电脑上安装 Git。根据你的操作系统选择对应的方法:

1

Windows 系统

访问 git-scm.com/download/win 下载安装程序,一路点击"下一步"完成安装。

📷 截图:Git for Windows 安装界面 下载 Git for Windows 点击下载
2

macOS 系统

打开终端(Terminal),运行以下命令:

brew install git

或者安装 Xcode Command Line Tools 会自动包含 Git

3

Linux 系统

Ubuntu/Debian 系统:

sudo apt install git

CentOS/Fedora 系统:

sudo yum install git

✅ 验证安装

打开终端/命令提示符,输入以下命令检查 Git 是否安装成功:

git --version
git version 2.39.0
# 看到类似输出就说明安装成功了!
⚙️

配置 Git

安装完成后,需要告诉 Git 你是谁。这样在提交代码时,Git 就知道是谁做的修改。

📷 截图:终端/命令提示符界面 user@computer ~ % git config --global user.name "你的名字" git config --global user.email "your@email.com"
1

设置用户名

替换成你的名字(可以使用中文):

git config --global user.name "张三"
2

设置邮箱

替换成你的邮箱地址:

git config --global user.email "zhangsan@example.com"
3

查看配置

确认配置是否正确:

git config --list

🧾 用户名和邮箱的意义

  • 写进每次提交(commit):显示在 git log 的作者信息里
  • 不用于登录:与 GitHub/Gitee 的账号名、密码没有直接关系
  • 影响平台归属:GitHub 会用提交里的 user.email 去匹配你账号中已验证的邮箱,从而计入贡献并显示头像
  • 推送认证是另一套:HTTPS 常用 Token,SSH 常用密钥(与这里的 email 无关)
💡

提示: --global 表示全局配置,对你电脑上的所有 Git 仓库都生效。如果只想对某个项目设置不同的用户信息,去掉 --global 即可。

🧠

理解 Git 的三个区域

Git 有三个重要的区域,理解它们是掌握 Git 的关键:

工作区 Working Directory 暂存区 Staging Area 仓库 Repository git add git commit 你实际编辑的文件 准备提交的文件 保存的历史版本
📝
工作区(Working Directory):你实际编辑文件的地方
📋
暂存区(Staging Area):准备提交到仓库的文件列表
📦
仓库(Repository):Git 保存所有历史版本的地方
🎬

创建你的第一个 Git 仓库

让我们通过实践来学习!打开终端/命令提示符,跟着下面的步骤操作:

✏️

动手练习

请在电脑上创建一个新文件夹,然后按照步骤操作。

1

创建项目文件夹

创建一个新文件夹并进入:

mkdir my-first-project
cd my-first-project
2

初始化 Git 仓库

运行 git init 命令:

git init
Initialized empty Git repository in /path/to/my-first-project/.git/

🎉 恭喜!你现在有了一个 Git 仓库!

3

创建一个文件

用你喜欢的编辑器创建一个 README.md 文件:

# 我的项目

这是我的第一个 Git 项目!
4

检查状态

查看 Git 知道哪些文件被修改了:

git status
On branch main
Untracked files:
  (use "git add <file>..." to include in what will be committed)
    README.md

nothing added to commit but untracked files present

Git 发现了一个新文件 README.md,但还没有跟踪它。

5

添加文件到暂存区

使用 git add 命令将文件添加到暂存区:

git add README.md

💡 提示: 使用 git add . 可以添加所有修改的文件。

6

提交更改

使用 git commit 将暂存区的内容保存到仓库:

git commit -m "首次提交:添加 README 文件"
[main (root-commit) abc1234] 首次提交:添加 README 文件
 1 file changed, 2 insertions(+)
 create mode 100644 README.md

🎊 恭喜完成第一次提交!

你刚刚完成了 Git 的基本工作流程:修改 → 添加 → 提交。这个循环会在你使用 Git 时不断重复。

🙈

使用 .gitignore 忽略不需要提交的文件

.gitignore 用来告诉 Git:哪些文件/目录不要被跟踪,从而避免把缓存、编译产物、密钥文件等误提交到仓库。

✅ 什么时候应该写 .gitignore?

  • 刚初始化仓库后、第一次提交前(最理想)
  • 项目里出现了缓存、临时文件、构建目录
  • 本地有 .env、密钥等敏感文件

🚫 不应该忽略什么?

  • 源代码(.py / .js / .tex 等)
  • 项目必须的配置文件(团队需要共享的)
1

创建 .gitignore 文件

在项目根目录创建一个名为 .gitignore 的文件,并写入规则:

# 系统文件
.DS_Store
Thumbs.db

# 编辑器
.vscode/
.idea/

# Node / 前端构建产物
node_modules/
dist/
build/

# Python
__pycache__/
*.pyc

# 日志与环境变量
*.log
.env

规则提示:目录/ 表示忽略整个目录,*.log 表示忽略所有以 .log 结尾的文件。

2

验证是否生效

检查某个文件是否会被忽略(输出会显示是哪条规则命中的):

git check-ignore -v path/to/file

⚠️ 常见坑:文件已被跟踪时,.gitignore 不会“自动移除”

如果某个文件/目录以前已经被提交过,那么即使你后来把它写进 .gitignore,Git 也会继续跟踪它。此时需要“取消跟踪但保留本地文件”:

git rm -r --cached node_modules/
git commit -m "停止跟踪已忽略文件"
⏪

回到历史提交(回退 / 查看旧版本)

当你已经有多次提交后,如果想“回到过去”,先想清楚目标:是只查看旧版本,还是要真的回退并继续开发。

✅ 只想查看旧版本(最安全)

  • 不会改变分支历史
  • 适合课堂练习、查 bug、对比文件

⚠️ 要回退当前分支(谨慎)

  • 可能改写历史
  • 协作时不推荐随意使用
1

找到你要回去的提交号

先用一行模式查看提交历史(复制前面的短哈希即可):

git log --oneline
2

只查看旧版本:临时切到某次提交

这会进入“分离头指针(detached HEAD)”状态,适合临时查看:

git switch --detach abc1234

看完回到当前分支(例如 main):

git switch main
3

从旧版本继续开发:从历史提交开新分支

这是协作/学习里最推荐的“回到过去并继续写”的方式:

git switch -c back-to-old abc1234

🧯 回退与撤销:两个容易混淆的命令

reset(改历史)

把当前分支指针“强行移回去”。如果你已经把提交分享给别人,协作时容易出问题。

git reset --hard abc1234

revert(不改历史)

生成一个“反向提交”来撤销某次提交,协作场景更安全。

git revert abc1234
💡

记忆法: 想“回去看看”用 switch --detach;想“从旧版本继续写”用 switch -c;协作时撤销提交优先用 revert。

📋

常用 Git 命令速查表

这些是你在日常使用中最常遇到的 Git 命令:

命令说明
git status查看当前文件状态
git add <file>将文件添加到暂存区
git add .添加所有修改的文件
git commit -m "消息"提交更改并添加说明
git log查看提交历史
git diff查看工作区的修改
git diff --staged查看暂存区的修改
git check-ignore -v <path>检查文件是否被 .gitignore 忽略(显示命中的规则)
git rm -r --cached <path>取消跟踪但保留本地文件(配合 .gitignore)

💡 Pro 提示

使用 git log --oneline 可以看到简洁的提交历史,每条记录只显示一行。

git log --oneline
abc1234 首次提交:添加 README 文件
def5678 修复了一个bug
🌿

理解分支(Branch)

分支是 Git 最强大的功能之一!它让你可以同时进行多个任务而不互相干扰。

1 2 3 A M 主分支 功能分支 合并
🌿
主分支(main/master):项目的稳定版本,通常是生产环境的代码
🔀
功能分支(feature):开发新功能时创建的分支
🐛
修复分支(fix/hotfix):修复 bug 时使用的分支
🔀

分支操作命令

学习如何创建、切换和合并分支:

创建和切换分支

创建一个新分支:

git branch feature-login

切换到新分支:

git checkout feature-login

创建并切换(快捷方式):

git checkout -b feature-login

查看和合并分支

查看所有分支:

git branch
* feature-login
 main

合并分支到当前分支:

git merge feature-login
💡

新命令: Git 2.23+ 引入了新命令 git switch 和 git restore,更清晰地分离了分支切换和文件恢复的功能。git switch = git checkout(切换分支)

☁️

远程仓库(Remote)

远程仓库是存放在互联网或其他网络上的 Git 仓库,通常用于团队协作。

📷 截图:本地和远程仓库的关系 你的电脑 本地仓库 GitHub/Gitee 远程仓库 git push git pull
1

添加远程仓库

将本地仓库连接到远程仓库:

git remote add origin https://gitee.com/username/repo.git
2

推送到远程仓库

将本地提交推送到远程:

git push -u origin main
3

从远程仓库拉取

获取远程仓库的更新:

git pull origin main
4

克隆远程仓库

复制一个远程仓库到本地:

git clone https://gitee.com/username/repo.git
🌐

使用 GitHub 和 Gitee

GitHub 和 Gitee 是最流行的 Git 代码托管平台,让团队协作变得简单。

🐙 GitHub

  • 全球最大的代码托管平台
  • 开源项目的首选
  • 丰富的集成和工具
  • 访问:github.com

🔴 Gitee

  • 中国本土的代码托管平台
  • 国内访问速度快
  • 支持中文
  • 访问:gitee.com

📝 在 Gitee 上创建仓库

1

注册账号

访问 gitee.com,点击右上角"注册"按钮

Gitee 注册 登录
2

创建新仓库

登录后点击右上角"+",选择"新建仓库"

+ 新建仓库 仓库名称: 是否开源:○公开 ◉私有 创建
3

获取仓库地址

创建后会显示仓库地址,复制 HTTPS 地址:

克隆/下载 https://gitee.com/username/my-project.git 复制
👥

局域网团队协作

在没有互联网的情况下,或者在公司内部网络中,你也可以和同事共享 Git 仓库!

🏢 方案一:共享文件夹

如果你和同事在同一个局域网,可以使用共享文件夹的方式:

A

同学 A 创建裸仓库

在共享文件夹中创建一个裸仓库(bare repository):

mkdir /shared/project.git
cd /shared/project.git
git init --bare

💡 什么是裸仓库? 裸仓库没有工作区,只用于共享,不能直接编辑文件。

B

同学 B 克隆仓库

同学 B 从共享文件夹克隆项目:

git clone /shared/project.git my-project
C

正常协作

双方都可以进行 git push 和 git pull 操作:

git push origin main
git pull origin main
同学 A 电脑 本地仓库 共享文件夹 裸仓库 project.git 同学 B 电脑 本地仓库
⚠️

注意: 共享文件夹方式需要文件系统支持。在 Windows 上可以使用网络共享,在 macOS/Linux 上可以使用 NFS 或 SMB。

⚠️

处理合并冲突

当两个人修改了同一文件的同一行时,Git 无法自动合并,需要手动解决冲突。

📷 截图:冲突文件的样子 def hello(): <<<<<<< HEAD print("你好,世界!") ======= print("Hello, World!") >>>>>>> feature-branch

🔧 解决冲突的步骤

1

查找冲突文件

使用 git status 查看哪些文件有冲突:

both modified: hello.py
2

打开冲突文件

用编辑器打开文件,找到冲突标记 <<<<<<< 和 >>>>>>>

3

选择要保留的内容

删除冲突标记,保留你想要的代码:

修改前:

<<<<<<< HEAD
print("你好")
=======
print("Hello")
>>>>>>> branch

修改后:

解决冲突
print("你好,世界!")
4

标记为已解决

保存文件,添加并提交:

git add hello.py
git commit
💡

预防冲突: 经常拉取更新(git pull),保持小而频繁的提交,及时和团队成员沟通,可以减少冲突的发生。

🎮

🎯 实战练习:团队网页项目

让我们模拟一个真实的团队协作场景!请找一个同学一起完成这个练习。

📋

练习目标

创建一个简单的网页项目,两名同学分别负责不同的部分,然后合并代码。

👨‍🎓 学生 A:项目负责人

1

创建项目结构

mkdir team-project
cd team-project
git init
2

创建 index.html

创建一个基础的 HTML 文件:

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>团队项目</title>
  <link rel="stylesheet" href="style.css">
</head>
<body>
  <h1>欢迎来到我们的项目</h1>
  <p>这是团队合作的结果!</p>
  <div id="content"></div>
  <script src="app.js"</script>
</body>
</html>
3

首次提交

git add .
git commit -m "初始提交:基础 HTML 结构"
4

创建共享仓库

将项目文件夹或仓库地址分享给同学 B:

# 方式1:使用 U 盘或共享文件夹
# 直接把文件夹拷贝给同学

# 方式2:推送到 Gitee
git remote add origin https://gitee.com/xxx/team-project.git
git push -u origin main

👩‍🎓 学生 B:协作者

1

克隆项目

git clone https://gitee.com/xxx/team-project.git
cd team-project
2

创建功能分支

git checkout -b feature-style
3

创建 style.css

body {
  font-family: Arial, sans-serif;
  background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
  min-height: 100vh;
  display: flex;
  justify-content: center;
  align-items: center;
}

h1 {
  color: white;
  text-shadow: 2px 2px 4px rgba(0,0,0,0.3);
}
4

提交并推送

git add style.css
git commit -m "添加样式文件"
git push -u origin feature-style

🤝 合并工作

1

学生 A 拉取更新

git pull origin feature-style
2

学生 A 合并分支

git merge feature-style
3

推送到主分支

git push origin main

🎉 练习完成!

现在你可以打开浏览器,查看 index.html 文件,看到你们合作的成果!

❓

常见问题与解决方案

提交信息写错了怎么办?

使用 git commit --amend 修改最后一次提交信息:

git commit --amend -m "新的提交信息"

如何撤销工作区的修改?

使用 git restore 恢复文件到上次提交的状态:

git restore file.txt

如何查看提交历史?

使用 git log 的各种选项:

git log --oneline --graph --all

忘记了 Git 命令?

使用 git help 查看帮助:

git help commit
⭐

Git 最佳实践

遵循这些惯例,可以让你的 Git 使用体验更愉快:

1️⃣
频繁提交:小而频繁的提交比大而少更好
2️⃣
清晰的提交信息:用中文简洁描述做了什么
3️⃣
使用 .gitignore:不要提交敏感文件和临时文件
4️⃣
分支命名规范:feature/功能名、fix/问题名、hotfix/紧急修复
5️⃣
推送前拉取:每次 push 前先 pull,减少冲突
# 常用的 .gitignore 示例
# Python
__pycache__/
*.py[cod]
.venv/

# Node.js
node_modules/
package-lock.json

# IDE
.vscode/
.idea/

# 系统文件
.DS_Store
Thumbs.db
📖

Git 命令快速参考卡

命令说明
🚀 初始化与配置
git init初始化仓库
git clone <url>克隆远程仓库
git config --global user.name "xxx"设置用户名
git config --global user.email "xxx"设置邮箱
📝 日常操作
git status查看状态
git add <file>添加到暂存区
git add .添加所有文件
git commit -m "xxx"提交更改
git log查看历史
git log --oneline简洁历史
🌿 分支操作
git branch查看分支
git branch <name>创建分支
git checkout <name>切换分支
git checkout -b <name>创建并切换
git merge <name>合并分支
git branch -d <name>删除分支
☁️ 远程操作
git remote add origin <url>添加远程仓库
git push -u origin main推送到远程
git pull origin main拉取更新
git fetch获取远程信息