# 分支（Branch）

2023年6月26日3分钟阅读

- FormalSciences/ComputerScience
- SoftwareEngineering/Collaboration
- Git

分支类型 | 命名规则 | 备注
--- | --- | ---
主分支 | `main` |
开发分支 | `develop` |
功能分支 | 除 `master`、`main`、`develop`、`release-*`、`hotfix-*` 以外的任何名字 | 避免使用 `master`、`main`、`develop`、`release-*`、`hotfix-*`
预发布分支 | `release-*` | 名称中的 `*` 表示版本号或其他标识
热修复分支 | `hotfix-*` | 名称中的 `*` 表示版本号或其他标识

为了防止产生歧义，我们建议避免使用简拼命名。

## 主要分支

中央仓库中存在两个生命期无限长的主要分支：

- Main（主分支）
- Develop（开发分支）

主分支 `origin/main` 的 `HEAD` 指向的源码总是处于可发布的状态。另一方面，开发分支 `origin/develop` 的 `HEAD` 指向的源码应包含为下次版本发布准备的最近的一次提交。

当 `develop` 分支上的代码达到一个稳定点，并且准备进行发版时，所有在该分支上的修改都应该合并回 `main` 分支，并且打一个版本号标签（`tag`）。

## 辅助分支

为了协助平行开发，简化功能追踪，协助产品发布和快速修复线上版本的 bug，我们采用了功能分支、预发布分支和热修复分支。

- Feature branches (功能分支)
- Release branches (预发布分支)
- Hotfix branches (热修复分支)

### 功能分支

功能分支是从 `develop` 创建，必须合并回 `develop`。这些分支主要存在于开发者的本地仓库，不在远程仓库 `origin` 中。

### 预发布分支

预发布分支从 `develop` 创建，必须合并回 `develop` 和 `main`。这些分支用于准备新版本的发布，包括进行小的 bug 修复和准备发布数据。发布后，预发布分支可以删除。

### 热修复分支

热修复分支从 `main` 创建，必须合并回 `develop` 和 `main`。这些分支用于修复线上版本的严重 bug。修复完成后，热修复分支可以删除。如果当前存在预发布分支，热修复分支应该合并到预发布分支，而不是开发分支。