文章

git分支管理策略

  • main: 具有无限生存期的主要分支,用于存放稳定的、可发布的代码。
  • dev: 作为主开发分支,所有的功能分支都会从这里拉取,并在开发完成后合并回这个分支。
  • feature: 每开始一个新功能都要从dev分支拉取一个新的功能分支。命名为 feature-*。完成后合并回 dev 分支。功能分支通常仅存在于开发人员存储库中,而不存在于origin 中。功能完成后,可以直接删除。
  • release: 当 dev 分支上的代码接近发布时,会创建一个 release-* 分支用于最后的测试和修复。完成后合并到 main 和 dev。
  • hotfix: 用于修复 main 分支上的紧急问题,命名为 hotfix-*。修复完成后合并到 main 和 dev。

开发流程

创建功能分支

开始新功能开发时,从dev创建新的功能分支。

1
$ git checkout -b myfeature dev

合并完成的功能

功能完成后,合并回dev分支。

1
2
3
4
5
6
$ git checkout dev
$ git merge --no-ff myfeature

$ git branch -d myfeature

$ git push origin dev

创建发布分支

当前版本的功能全部开发完成后,需要基于dev创建release分支,并在release分支上做最后的bug修复。此时dev分支可以开始下一个版本功能的开发。

1
2
$ git checkout -b release-1.2 dev
$ git commit -a -m "Bumped version number to 1.2"

完成发布分支

当release测试通过后,可以向main分支合并,并将main分支打上版本标签。用于软件版本追踪管理。

1
2
3
4
5
$ git checkout master

$ git merge --no-ff release-1.2

$ git tag -a 1.2

为了保留在release分支中所做的更改,我们还需要将更改合并回dev分支。

1
2
3
$ git checkout dev

$ git merge --no-ff release-1.2

最后删除release分支

1
$ git branch -d release-1.2

热修复分支

当软件在生产环境中出现了严重错误,需要紧急修复,可以直接从main分支创建hotfix分支。

1
2
3
$ git checkout -b hotfix-1.2.21060601 master

$ git commit -a -m "Bumped version number to 1.2.21060601"

错误修复完成后,合并回main分支以及dev分支。

1
2
3
4
5
6
7
8
9
$ git checkout master

$ git merge --no-ff hotfix-1.2.21060601 

$ git tag -a 1.2.21060601 

$ git checkout dev

$ git merge --no-ff hotfix-1.2.21060601 

最后,删除临时分支:

1
$ git branch -d hotfix-1.2.21060601 

##代码合并规范

规范化的 commit 信息有助于提高代码的可维护性和可读性,方便团队成员之间的协作,因此,我们需要制定统一标准,促使团队形成一致的代码提交风格,更好的提高工作效率。

commit 格式

1
<type>[ticketId]: <subject> 

type (必须)

  • feat:新功能(feature)。
  • fix/to:修复bug,可以是QA发现的BUG,也可以是研发自己发现的BUG。
    • fix:产生diff并自动修复此问题。适合于一次提交直接修复问题
    • to:只产生diff不自动修复此问题。适合于多次提交。最终修复问题提交时使用fix
  • docs:文档(documentation)。
  • style:格式(不影响代码运行的变动)。
  • refactor:重构(即不是新增功能,也不是修改bug的代码变动)。
  • perf:优化相关,比如提升性能、体验。
  • test:增加测试。
  • chore:构建过程或辅助工具的变动。
  • revert:回滚到上一个版本。
  • merge:代码合并。
  • sync:同步主线或分支的Bug。

tickitId(可选)

如果开发的内容录入了JIRA,需要填写ticketId,便于后续追踪。

subject(必须)

subject是commit目的的简短描述,不超过50个字符,建议使用中文,结尾不加句号或其他标点符号。

示例

根据以上规范git commit message将是如下的格式:

1
2
fix[PD3-1669]: 用户查询缺少username属性 
feat[PD3-1670]: 用户查询接口开发
本文由作者按照 CC BY 4.0 进行授权