1. Git 介绍

1.1 什么是 Git

Git 是一个分布式版本控制系统,由 Linux 之父 Linus Torvalds 于 2005 年创建,用于跟踪文件的变化并协调多人共同开发项目。与传统的集中式版本控制系统(如 SVN)不同,Git 允许开发者在本地拥有完整的代码仓库,即使没有网络连接也能进行版本控制操作。

1.2 Git 的特点

  • 分布式系统:每个开发者都拥有完整的代码仓库副本
  • 高性能:Git 的设计注重速度和效率,即使处理大型项目也表现优异
  • 数据完整性:Git 使用 SHA-1 哈希算法确保数据的完整性
  • 分支管理:创建、合并分支操作轻量且快速
  • 适应性强:支持各种开发工作流程

1.3 为什么使用 Git

  • 可以跟踪代码的历史变更,了解谁在什么时候修改了什么内容
  • 支持团队协作开发,多人同时进行开发而不互相干扰
  • 可以回滚到之前的版本,便于错误恢复
  • 支持代码分支管理,便于功能开发和实验
  • 代码审查和质量控制

2. Git 的安装与配置

2.1 安装 Git

Windows:

  • Git 官网 下载安装包并运行
  • 也可以通过 Chocolatey 包管理器安装:choco install git

macOS:

  • 通过 Homebrew 安装:brew install git
  • 也可以从官网下载安装包

Linux:

  • Debian/Ubuntu: sudo apt-get install git
  • Fedora: sudo dnf install git
  • CentOS: sudo yum install git

2.2 基本配置

安装完成后,需要进行一些基本配置:

1
2
3
4
5
6
7
8
9
# 设置用户名和邮箱
git config --global user.name "你的名字"
git config --global user.email "你的邮箱"

# 设置默认编辑器
git config --global core.editor vim

# 查看配置
git config --list

3. Git 的基本使用

3.1 创建仓库

1
2
3
4
5
# 初始化新仓库
git init

# 克隆现有仓库
git clone <仓库URL>

3.2 基本工作流程

Git 工作流程通常包括以下步骤:

  1. 修改文件(工作区)
  2. 添加修改到暂存区:git add <文件名>git add .
  3. 提交修改到本地仓库:git commit -m "提交信息"
  4. 推送到远程仓库:git push <远程仓库名> <分支名>

3.3 常用命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 查看状态
git status

# 查看变更
git diff

# 添加文件到暂存区
git add <文件名>
git add . # 添加所有修改

# 提交更改
git commit -m "提交信息"

# 查看提交历史
git log
git log --oneline # 简洁模式

# 撤销工作区修改
git checkout -- <文件名>

# 撤销暂存区修改
git reset HEAD <文件名>

# 删除文件
git rm <文件名>

4. Git 核心概念

4.1 工作区、暂存区与版本库

Git 管理的项目包含三个主要区域:

  • 工作区(Working Directory):你实际编辑文件的地方
  • 暂存区(Staging Area):临时存储你的改动
  • 版本库(Repository):保存项目的元数据和对象数据库

工作流程:工作区 → 暂存区(git add)→ 版本库(git commit

4.2 分支管理

分支是 Git 的核心特性之一,允许从主开发线分离出来进行独立工作。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 查看分支
git branch

# 创建分支
git branch <分支名>

# 切换分支
git checkout <分支名>
# 或者使用新命令
git switch <分支名>

# 创建并切换分支
git checkout -b <分支名>
# 或者
git switch -c <分支名>

# 合并分支
git merge <分支名>

# 删除分支
git branch -d <分支名> # 安全删除
git branch -D <分支名> # 强制删除

4.3 远程仓库

远程仓库是托管在网络上的项目版本库,便于团队协作。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 查看远程仓库
git remote -v

# 添加远程仓库
git remote add <简称> <远程URL>

# 从远程获取数据
git fetch <远程名>

# 拉取并合并远程数据
git pull <远程名> <分支名>

# 推送到远程
git push <远程名> <分支名>

# 删除远程分支
git push <远程名> --delete <分支名>

4.4 合并与解决冲突

当多人修改同一文件时可能会产生冲突,需要手动解决。

1
2
3
4
5
6
7
8
9
# 合并分支
git merge <分支名>

# 如果有冲突,编辑冲突文件
# 冲突部分会用 <<<<<<< HEAD, =======, >>>>>>> 标记出来

# 解决冲突后,添加并提交
git add <冲突文件>
git commit -m "解决冲突"

4.5 标签管理

标签通常用于标记发布版本。

1
2
3
4
5
6
7
8
9
10
11
12
13
# 列出标签
git tag

# 创建标签
git tag <标签名> # 轻量标签
git tag -a <标签名> -m "标签信息" # 附注标签

# 查看标签信息
git show <标签名>

# 推送标签到远程
git push origin <标签名>
git push origin --tags # 推送所有标签

4.6 Git 重置与回滚

1
2
3
4
5
6
7
8
# 回滚到指定提交
git reset --hard <提交ID>

# 创建新提交来撤销某次提交
git revert <提交ID>

# 修改最近一次提交
git commit --amend

5. Git 高级特性

5.1 Git Stash

临时保存修改,便于切换分支或拉取代码。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 保存当前工作
git stash

# 查看存储列表
git stash list

# 应用最近的存储
git stash apply

# 应用并删除存储
git stash pop

# 删除存储
git stash drop

5.2 Git Rebase

重新应用提交历史,使其更加简洁。

1
2
3
4
5
# 变基操作
git rebase <分支名>

# 交互式变基
git rebase -i HEAD~3 # 重新排列/修改最近3次提交

5.3 Git Cherry-pick

选择指定的提交应用到当前分支。

1
git cherry-pick <提交ID>

6. Git 最佳实践

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
%% 标准 Git Flow 工作流图(带 commit message 规范)
gitGraph
commit id: "chore(init): 初始化项目" %% 初始化主分支 main
branch develop
checkout develop
commit id: "chore(dev-env): 配置开发环境" %% 设置 CI/CD、依赖等

%% Feature 分支
%% 命名规则:feature/<功能模块>
branch feature/login
commit id: "feat(login): 开发登录页面 UI"
commit id: "feat(login): 实现登录逻辑和 API"
commit id: "feat(login): 添加登录表单验证"
checkout develop
merge feature/login tag: "合并功能-login"

branch feature/order
commit id: "feat(order): 创建订单页面"
commit id: "feat(order): 实现下单逻辑"
commit id: "feat(order): 订单列表分页功能"
checkout develop
merge feature/order tag: "合并功能-order"

branch feature/payment
commit id: "feat(payment): 接入支付 SDK"
commit id: "feat(payment): 实现支付回调处理"
checkout develop
merge feature/payment tag: "合并功能-payment"

%% Release 分支
%% 命名规则:release/<版本号>
branch release/1.0.0
commit id: "fix(test): 修复测试中发现的 bug"
commit id: "chore(release): 更新版本号和发布文档"
checkout main
merge release/1.0.0 tag: "v1.0.0 发布"
checkout develop
merge release/1.0.0 tag: "同步 release 修复"

%% Hotfix 分支
%% 命名规则:hotfix/<版本号>
checkout main
branch hotfix/1.0.1
commit id: "fix(login): 修复线上登录异常"
commit id: "fix(payment): 修复支付回调错误"
checkout main
merge hotfix/1.0.1 tag: "v1.0.1 热修复"
checkout develop
merge hotfix/1.0.1 tag: "同步 hotfix 修复"

分支说明及命名规范

  • master(main):生产环境主分支,每个稳定版本从这里发布并打 tag
  • develop:开发主分支,只做合并操作
  • feature/xxx(功能名称)/xxx(更细粒度特性):新功能开发,从 develop 拉出,开发完成后合并回 develop 分支
  • release/xxx(版本号):预发布阶段,做文档补全、测试与修复,完成后合并回入 master 并同步到 develop 分支
  • hotfix/xxx(版本号):线上紧急修复,从 master 拉出,修完后合并回 master 并同步至 develop 分支

commit 命名规范

  • header:<type>(<scope>): <subject>,简短概述本次提交做了什么
    • type:提交类型
    • scope:作用范围,可选,但推荐使用模块名、功能名。
    • subject:简洁说明修改内容,尽量使用动词原形。
  • body(可选):详细说明本次提交的原因、实现思路、注意事项

提交类型

常见类型:

Type 说明 示例
feat 新功能 feat(login): 添加登录页面
fix 修复 bug fix(cart): 修复购物车折扣显示错误
docs 文档变更 docs(api): 更新订单接口文档
style 代码风格修改,不影响功能 style(login): 调整表单缩进
refactor 重构代码,既不新增功能也不修复 bug refactor(order): 优化订单列表渲染逻辑
perf 性能优化 perf(cart): 改进购物车计算效率
test 添加或修改测试代码 test(login): 添加登录单元测试
chore 构建、工具或杂项修改,不影响源代码 chore(ci): 更新 CI 配置
build 构建系统相关修改(如 package.json、Gradle) build(deps): 升级依赖库版本
ci 持续集成相关配置修改 ci(travis): 修复 CI 流程
revert 回滚之前的提交 revert: feat(login): 添加登录页面