Skip to content

Git使用规范

规范使用GIT有利于向团队成员传达清晰有效的信息,增强团队的协作,减少沟通成本,同时也便于后期维护对历史提交、变更信息的追溯。

分支管理规范

目前使用度比较高的工作流有Git Flow、GitHub Flow、GitLab Flow,结合团队当前的开发发布流程,使用Git Flow作为分支管理策略,并作了一些调整。Git flow是由Vincent Driessen于2010 年提出的代码分支管理模型。

Git Flow分支命名规范

  • master 分支:master 分支有且仅有一个,名称即为 master,不能有master-xxx命名的分支存在。
  • develop 分支:develop 分支有且仅有一个,名称即为 develop,不能有develop-xxx命名的分支存在。
  • feature 分支:feature/<版本号>-<功能名>,例如:feature/v1.3-login。
  • hotfix 分支:用于修复生产环境的临时分支。

Git Flow分支说明

  • master(常驻)

    代码库主分支,所有提供给用户使用的正式版本,都在这个主分支上发布。它是自动建立的,版本库初始化以后,默认就是在主分支在进行开发。团队成员从主分支(master)获得的都是处于可发布状态的代码。

    生产环境只能使用master分支进行发布,每次版本成功发布后,要打上tag版本标签,以便发布的回滚,版本代码的追溯。

  • develop(常驻)

    汇总开发者完成的工作成果,develop主要用于版本完整功能的测试,对应于测试环境develop分支代码的修改仅限于修复测试环境的bug,简单的性能优化、代码优化,对于周期长的性能优化、重构要单独创建一个feature分支。

    测试通过后,如果要进行版本发布,才将develop合并到master分支。

  • feature

    当要开发新功能时,从 develop分支创建一个新的 feature 分支,并在 feature 分支上进行开发。

    分支创建后要push到远端,以便多人联合开发。

    feature对应发布到开发环境,用于前后端在开发阶段的功能联调。

    开发完成后,需要将该 feature 分支合并到 develop 分支,最后删除feature 分支。

  • hotfix

    master 分支中的产品出现需要立即修复的 bug 时,从 master 分支上创建一个新的 hotfix 分支,并在 hotfix 分支上进行 BUG 修复。修复完成后,需要将 hotfix 分支合并到 master 分支和 develop 分支,并为 master 分支添加新的版本号 tag,最后删除 hotfix 分支。

分支操作规范

为了使Git提交历史的图谱更具有可读性,应减少不必要merge节点,避免出现过多的分叉。

git pull 使用 rebase方式

同一分支更新文件时,使用rebase方式,避免代码冲突时,分支记录中出现不必要的 Merge branch ‘develop’ of … 记录

javascript
	#pull命令
	$ git pull --rebase
	
	#或者修改pull默认的fast-forward模式为 rebase模式
	$ git config --global pull.rebase true		//这个配置就是告诉git在每次pull前先进行rebase操作。

在IDEA中的设置update 方式为 rebase

不同分支合并使用 --no-ff方式

javascript
	#切换到develop分支
	$ git checkout develop
	#使用no-ff 递归合并,将feature/v1.6合并到当前分支
	$ git merge --no-ff feature/v1.6

合理的使用cherry-pick

使用cherry-pick 可以将任何分支的选定的单个提交集成到当前的 HEAD 分支中。

javascript
	# af02e0b是待集成commit节点的SHA值
	$ git cherry-pick af02e0b
	# 只将提交的更改添加到工作副本,而不是直接commit
	$ git cherry-pick af02e0b --no-commit

cherry-pick 会引起重复提交,cherry-pick时是生成全新的提交对象,具有自己的新 SHA 标识符。

提交信息规范

Angular规范是目前使用最广的写法,比较合理和系统化,并且有配套的工具(IDEA 2020版本开始集成了这种写法),本文参考了Angular规范并进行适当的调整。

commit message格式

text
<type>(<scope>): <subject>	//冒号后要加空格
// 空一行
<body>
// 空一行
<footer>
  • type(必须) type用于说明git commit的类别,允许使用下面的标识。
标识说明
feat新功能。
fix修复bug,可以是QA发现的BUG,也可以是研发自己发现的BUG。
test增加测试。
perf优化相关,比如提升性能、体验。
refactor重构(即不是新增功能,也不是修改bug的代码变动)。
merge代码合并。
sync同步主线或分支的Bug。
docs文档(documentation)。
style格式(不影响代码运行的变动)。
revert回滚到上一个版本。
chore与src、test 源文件无关的其它变动。
ciCI相关的配置、脚本。
build构造工具的或者外部依赖的改动,例如webpack,npm,maven,gradle。
  • scope(可选) scope用于说明 commit 影响的范围。 例如在Angular,可以是location,browser,compile,compile,animations,http,core等。如果你的修改影响了不止一个scope,你可以使用 *代替。

  • subject(必须) subject是commit目的的简短描述,建议使用中文。

  • body(可选) 补充subject,如必要性、解决的问题、可能影响的地方,可以换行 如果有链接一定附上链接

  • footer(可选) bug的id、issue的id等