一. 为何要进行分支管理
- 分支之间互不影响,开发者可以独立开发,提高团队开发效率;
- 不同功能的分支形成代码隔离,发布时从主分支进行代码发布,测试在测试分支,开发在开发分支,减少出错。。
二. 分支管理策略
master
分支
- 主分支,用于部署生产环境的分支,是所有分支的主干,与当前线上代码保持统一
- 由主开发人员、研发组leader管控
- 不允许开发者在该分支上直接开发
dev
分支:
- 开发分支,开发各类功能的合并分支,即当前最新功能的分支
- 项目按功能模块创建dev-xxx分支(xxx 表示功能的简单描述),各人员开发完成后提交到
dev
分支,主开发人员审核后,合并到dev分支- 一般预发布分支从此分支拉取创建
- 不允许开发者在该分支上直接开发
feature
分支
- 功能分支,一般为 开发独立功能/新技术研究尝试 时创建,以feature-xxx命名(xxx 表示功能的简单描述)
- 从
master
/dev
分支上面分出来的,开发完成,合并回去之后,删除该分支- 开发周期较长时,建议定期拉取代码,避免长时间不更新,提交时冲突过多
release
分支
- 预发布分支,发布正式版本之前(即合并到
master
分支之前),用来进行测试,以release-xxx
命名(xxx 表示功能的简单描述)- 从dev分支拉取代码创建,如出现
bug
,则从release
分支拉取fixbug
分支,进行修复- 很多公司忽略该分支,直接提交到
master
进行发布,可根据公司情况进行选择- 不允许开发者在该分支上开发
fixbug
分支
bug
修复分支,修复完成之后,合并到master
/release
分支上,并删除该分支- 常规
bug
,以bugfix_xxx
命名。xxx 表示 bug 的简单描述。- 紧急
bug
, 以hotfix_xxx
命名。xxx 表示 bug 的简单描述
tag标签
- 每次从
master
发布生产环境后,用tag标记一个版本,在master分支上的每个tag都对应历史的一个线上版本- tag命名:
v主版本号.子版本号.阶段版本号.日期版本号_软件阶段
v1.0.0.051021_beta
v1.0.0.061021_release
三. 分支相关常用命令
# 列出所有本地分支
$ git branch
# 列出所有远程分支
$ git branch -r
# 列出所有本地分支和远程分支
$ git branch -a
# 新建一个分支,但依然停留在当前分支
$ git branch [branch-name]
# 新建一个分支,并切换到该分支
$ git checkout -b [branch]
# 新建一个分支,指向指定commit
$ git branch [branch] [commit]
# 新建一个分支,与指定的远程分支建立追踪关系
$ git branch --track [branch] [remote-branch]
# 切换到指定分支,并更新工作区
$ git checkout [branch-name]
# 切换到上一个分支
$ git checkout -
# 建立追踪关系,在现有分支与指定的远程分支之间
$ git branch --set-upstream [branch] [remote-branch]
# 合并指定分支到当前分支
$ git merge [branch] # 快速合并
$ git merge --no-ff [branch] # 非快速合并(建议使用)
# 选择一个commit,合并进当前分支
$ git cherry-pick [commit]
# 删除分支
$ git branch -d [branch-name]
# 删除远程分支
$ git push origin --delete [branch-name]
$ git branch -dr [remote/branch]
四. 总结
1. 长期存在的分支只有master和dev分支,其他分支都是多个且临时的
2. 根据公司的产品规划及项目大小,制定合理的规范
关注公众号『web前端技术分享』获取更多实践分享,免费领取大厂面试题