blog/docs/articles/开发工具/git/Git 工作流.md

130 lines
3.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

---
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不影响其它版本分支。