😁 git协作规范及流程说明
::: hljs-center
# git协作规范及流程说明
:::
  规范制定分支为俩种类型,分别为
  **主要分支**
  **临时性分支**
## 1、主要分支
  主要分支主要是3个:
  **主(master)分支**
  **开发(develop)分支**
### 1.1 主分支-master
  master分支在每个代码仓库中有且只有一个,用来存储已发布上线的代码。
### 1.2 开发分支-develop
  develop分支是日常开发过程中使用的分支,当需要上线近期开发稳定的代码功能时将会合并到master分支。
## 2、临时性分支
  用于应对一些特定目的的版本开发与发布。临时性分支主要有三种:
  **功能(feature)分支**
  **预发布(release)分支**
  **修补bug(fixbug)分支**
  这三种分支都属于临时性需要,使用完以后,应该删除,保持代码库的常设分支始终只有master和develop。
### 2.1 功能分支 - feature
  功能分支,它是为了开发某种特定功能(新功能),从develop分支上面分出来的。开发完成后,要再并入develop。
  功能分支的名字,可以采用 feature-<font color=#8B0000>_{name}_</font> 的形式命名。<font color=#8B0000>_{name}_</font> 表示新功能的名称。
  例如 :准备开发一个提醒用户未读消息的功能,可以命名为 feature-reminderUnread
```bash
# 从master分支拷贝代码并创建一个新的功能分支:
git branch -c master feature-{name}
# 从develop分支拷贝代码并创建一个新的功能分支:
git branch -c develop feature-{name}
# 切换到创建的功能分支:
git checkout feature-{name}
# 开发完成后, 推送到云端仓库:
# set-upstream参数代表本地分支与云端分支进行关联,首次推送需要使用,关联完成后后续推送可以不加此参数
git commit -m '本次开发功能描述'
git push --set-upstream origin feature-{name}
# 删除功能分支(本地):
git branch -d feature-{name}
# 删除功能分支(云端):
git push origin -d feature-{name}
# 开发完成后,必要时建议合并主要分支的最新代码后提交给测试工程师测试:
git fetch --all
git merge --no-ff develop
```
  功能分支工作完成后,需要登录云端仓库提交pull request。
### 2.2 修补bug分支 - fixbug
  修补bug分支,当软件发布以后,难免会出现bug。这时就需要创建一个分支,进行bug修补。
  修补bug分支是==从master分支或者develop分支上面分出来的==。修补结束以后,再==合并进master和develop分支==。它的命名,可以采用fixbug-<font color=blue>_{branch}_</font>-<font color=#8B0000>_{bug1,bug2}_</font>的形式。<font color=blue>_{branch}_</font>表示当前修补bug存在于哪个主要分支,<font color=#8B0000>_{bug1,bug2}_</font>表示当前修补bug的唯一编号或名称,多个bug共同修复使用 **,** 符号隔开。
  栗子1:master分支上有一个id为999的bug,可以命名为 fixbug-master-999
  栗子2:develop分支上存在id为666和888的俩个bug,对其共同修复,可以命名为 fixbug-develop-666,888
```bash
# 从master分支拷贝代码并创建一个新的修补bug分支:
git branch -c master fixbug-master-{bug1,bug2}
# 切换到创建的功能分支:
git checkout fixbug-master-{bug1,bug2}
# 修补完成后, 推送到远端仓库:
# set-upstream参数代表本地分支与云端分支进行关联,首次推送需要使用,关联完成后后续推送可以不加此参数
git commit -m '本次修补描述'
git push --set-upstream origin fixbug-master-{bug1,bug2}
# 最后,删除修补bug分支(本地):
git branch -d fixbug-master-{bug1,bug2}
# 删除修补bug分支(云端):
git push origin -d fixbug-master-{bug1,bug2}
# 修补结束后,必要时建议合并主要分支的最新代码后提交给测试工程师测试:
git fetch --all
git merge --no-ff develop
```
  修补bug工作完成后,需要登录云端仓库提交pull request。
### 2.3 预发布分支 - release
预发布分支,它是指发布正式版本之前(即合并到master分支之前),我们可能需要有一个预发布的版本进行测试。
预发布分支是从develop分支上面分出来的,预发布结束以后,必须==合并进develop和master分支==。它的命名,可以采用release-<font color=#8B0000>_{name}_</font>的形式。
```bash
# 从develop分支拷贝代码并创建一个新的预发布分支:
git branch -c develop release-{name}
# 测试通过后,合并到master分支:
git checkout master
git merge --no-ff release-{name}
# 对合并生成的新节点,做一个标签
git tag -a 1.2
# 再合并到develop分支:
git checkout develop
git merge --no-ff release-{name}
# 最后,删除预发布分支:
git branch -d release-{name}
```
## QA
### Q:伙伴们如何配合?
A:工作示意如下
### Q:测试工程师怎样拉取代码?
A:命令如下
```bash
# 本地同步远端仓库分支
git remote update
# 切换到需测试分支
git checkout {分支名称}
# 拉取需测试分支代码
git pull origin {分支名称}
```