130 lines
3.9 KiB
Markdown
130 lines
3.9 KiB
Markdown
|
---
|
|||
|
date: 2023-02-23
|
|||
|
---
|
|||
|
# Git 工作流
|
|||
|
|
|||
|
## 0. 创建仓库
|
|||
|
| | |
|
|||
|
| -------- | ---- |
|
|||
|
| 主分支 | main |
|
|||
|
| 开发分支 | dev |
|
|||
|
|
|||
|
## 1. 创建新特性
|
|||
|
### 1.1 创建 feature 分支
|
|||
|
```
|
|||
|
git flow feature start new-feature
|
|||
|
```
|
|||
|
Coding and commit...
|
|||
|
|
|||
|
> **远程 feature 分支**
|
|||
|
> ```
|
|||
|
> git push orgin feature/new-feature
|
|||
|
> ```
|
|||
|
> - 该远程分支只是为了同步工作而已,如果没有这方面的需要,等到需要 Pull Request 时创建一个临时的分支即可。
|
|||
|
> - 其他成员可以将仓库 fork 到 Ta 自己的仓库,并创建分支进行开发,PR 时将 Ta 自己的远程分支合并到项目仓库的 main。
|
|||
|
|
|||
|
### 1.2 完成新特性分支
|
|||
|
|
|||
|
#### 1.2.1 变基远程 dev 最新的更改到 feature 分支(可选)
|
|||
|
拉取远程最新(main 和)dev
|
|||
|
```
|
|||
|
git pull origin main # 可选
|
|||
|
git pull origin dev
|
|||
|
```
|
|||
|
|
|||
|
变基到本地 feature 分支
|
|||
|
```
|
|||
|
git checkout feature/new-feature
|
|||
|
git rebase dev
|
|||
|
```
|
|||
|
#### 1.2.2 提交 Pull Request
|
|||
|
|
|||
|
1. 推送远程分支:
|
|||
|
```
|
|||
|
git push orgin feature/new-feature
|
|||
|
```
|
|||
|
或
|
|||
|
```
|
|||
|
git push --force orgin feature/new-feature
|
|||
|
```
|
|||
|
2. 提交一个 Pull Request,项目管理者可使用 `squash and merge` 将分支上的多个提交合并为 dev 上的一个提交;
|
|||
|
3. 删除远程的 feature 分支:
|
|||
|
```
|
|||
|
git push orgin -d feature/new-feature
|
|||
|
```
|
|||
|
4. 更新本地的(main 和)dev 分支:
|
|||
|
```
|
|||
|
git pull origin main # 可选
|
|||
|
git pull origin dev
|
|||
|
```
|
|||
|
5. 删除本地 feature 分支:
|
|||
|
```
|
|||
|
git checkout dev
|
|||
|
git branch -d feature/new-feature
|
|||
|
```
|
|||
|
|
|||
|
## 2. bugfix
|
|||
|
|
|||
|
流程基本和 feature 一样。
|
|||
|
|
|||
|
```
|
|||
|
git flow bugfix start issue-msg
|
|||
|
git push orgin bugfix/issue-msg
|
|||
|
```
|
|||
|
|
|||
|
> 这里的 bugfix 指的是发布正式版本前需要修复的 bug。
|
|||
|
|
|||
|
> 此时 main 的 版本号为 x.x.x-SNAPSHOT,不断合并不同的 feature 和 bugfix。
|
|||
|
|
|||
|
## 3. 发布正式版本
|
|||
|
|
|||
|
**规约:版本号格式为:主版本号.次版本号.修订号**
|
|||
|
|
|||
|
> 假设现在发布 `0.1.0`。
|
|||
|
|
|||
|
发布前,确定未合并到 dev 的 bugfix 和 feature 是为下一个版本准备的。
|
|||
|
|
|||
|
1. 创建发布分支:
|
|||
|
```
|
|||
|
git flow release start 0.1.0
|
|||
|
```
|
|||
|
2. 做发布前的准备 *(包括 test、fix、以及可能存在的几次预发布,`0.1.0-SNAPSHOT` -> `0.1.0-rc1` -> `0.1.0-rc2` -> `0.1.0`)* ;
|
|||
|
3. 创建版本分支并将 release 合并到 dev 和 main:
|
|||
|
```
|
|||
|
git checkout release/0.1.0
|
|||
|
git branch v0.1.x
|
|||
|
git push orgin v0.1.x
|
|||
|
git flow release finish 0.1.0
|
|||
|
```
|
|||
|
4. 修改 dev 的版本号为 `0.2.0-SNAPSHOT`;
|
|||
|
5. 推送 main 和 dev 到远程:
|
|||
|
```
|
|||
|
git push orgin main --tags
|
|||
|
git push orgin dev --tags
|
|||
|
```
|
|||
|
|
|||
|
> 预发布时的代码修改,可以直接提交。也可以创建新的 bugfix 分支修复 bug 后合并回 release 分支,但该修复分支其它分支可以不需要知道,只要最后随着 release 合并回 main 和 dev 就好。
|
|||
|
|
|||
|
> `v0.1.0` 分支此时的版本号为 `0.1.0`;
|
|||
|
> `main` 的版本号为 `0.2.0-SNAPSHOT`,为发布 `0.2.0` 做准备,直到创建 `v0.2.x` 分支发布 `0.2.0`。
|
|||
|
|
|||
|
## 4. hotfix
|
|||
|
|
|||
|
### 4.1 多版本修复
|
|||
|
hotfix 用于修复当前支持的发布版本中需要修复的 bug,如果与其它支持中的版本兼容,则也将其合并到该发布分支中。
|
|||
|
|
|||
|
1. 如果没有 issue 则自行创建;
|
|||
|
2. 基于 main 上合适的某次提交创建分支 hotfix/issue-name,该节点为需要应用的最后一个版本分支签出时的节点;
|
|||
|
3. 修复 bug,提交时描述可包含 `fixed #issue-code`;
|
|||
|
4. 发布分支:`git push origin hotfix/issue-name`;
|
|||
|
5. 提交 Pull Request 到 main、dev 和需要应用的版本分支;
|
|||
|
6. 删除该 hotfix 分支:
|
|||
|
```
|
|||
|
git branch -d hotfix/issue-name
|
|||
|
git push origin --delete hotfix/issue-name
|
|||
|
```
|
|||
|
7. 各版本分支各自修订号加一(`0.1.0` -> `0.1.1`),提交,加 tag,推送;
|
|||
|
|
|||
|
### 4.2 单版本修复
|
|||
|
各版本分支可创建各自的 hotfix 分支修复 bug,不影响其它版本分支。
|