项目 Git 使用规范
- 分支管理规范
1.1 分支说明和操作
master 分支
master 永远处于稳定状态,这个分支代码可以随时用来部署。不允许在该分支直接提交代码。
develop 分支
开发分支,包含了项目最新的功能和代码,所有开发都依赖 develop 分支进行。
小的改动可以直接在 develop 分支进行,改动较多时切出新的 feature 分支进行。
feature 分支
功能分支,开发新功能的分支。
开发新的功能或者改动较大的调整,从 develop 分支切换出 feature 分支,分支名称为 feature/xxx ,如果该功能只是某个模块的,分支名称添加模块名,例如 feature/train/student_ticket。
开发完成后合并回 develop 分支并且删除这个 feature 分支,相应的操作如下:
切出新的 feature/xxx 分支
git checkout -b feature/xxx develop
写代码,提交,写代码,提交
feature 开发完成,合并回 develop
git checkout develop
务必加上 --no-ff,以保持分支的合并历史
git merge --no-ff feature/xxx
git branch -d feature/xxx
如果想要当前分支能保持与 develop 的更新,请用 rebase,操作如下:
假设当前在 feature/xxx 分支
git rebase develop
rebase 过程中出现冲突,请按照提示进行操作,只要是 git rebase 相关的指令
rebase 会修改历史,如果你的 feature 分支是跟人合作开发的或者已经提交到远端,请互相做好协调。
release 分支
发布分支,新功能合并到 develop 分支,准备发布新版本时使用的分支。
当 develop 上的功能和 bug 修得差不多的时候,我们就要发布新版本了,这个时候从 develop 分支上开出一个 release 分支,来做发布前的准备,分支名约定为rel/版本号,eg:rel/953。
发布之前发现的 bug 就直接在这个分支上修复,确定没有问题后就会合并到 master 分支,发布。相应操作如下:
git checkout -b release/20121221 develop
修复 bug、检查没问题后合并到 master 分支并删除
git checkout master
git merge --no-ff release/20121221
添加版本标记,这里可以使用版本发布日期或者具体的版本号
git tag 20121221
为了让 release 分支上 bug 修改作用到 develop 分支,我们还需要把这个 release 分支合并回 develop 分支:
git checkout develop
git merge --no-ff release/20121221
到此,这个 release 分支完成了它的使命,可以被删除了
git branch -d release/20121221
hotfix 分支
紧急修复线上 bug 分支。
如果我们发现线上的代码(也就是 master)有 bug,但是这个时候我们的 develop 上的有些功能还没完成,还不能发布,这个时候我们可以从 master 分支上开出一个 hotfix 分支(记住:直接在 master 上提交代码是不允许的!),分支名约定为hotfix/xxx,在这个分支上修改完 bug 后需要把这个分支同时合并到 master 和 develop 分支。相应操作如下:
git checkout -b hotfix/xxx master
修完 bug 后
git checkout master
git merge --no-ff hotfix/xxx
git checkout develop
git merge --no-ff hotfix/xxx
hotfix 分支完成使命
git branch -d hotfix/xxx
例外:当 hotfix 分支完成,这个时候如果有 release 分支存在,那么这个 hotfix 就应该合并到 release,而不是 develop 分支。
1.2 分支操作注意事项
同一分支 git pull 使用 rebase
git pull --rebase
默认的 git pull 行为是 merge,可以进行如下设置修改默认的 git pull 行为:
#为某个分支单独设置,这里是设置 dev 分支
git config branch.dev.rebase true
#全局设置,所有的分支 git pull 均使用 --rebase
git config --global pull.rebase true
git config --global branch.autoSetupRebase always
分支合并使用 --no-ff
例如当前在 develop 分支,需要合并 feature/xxx 分支
git merge --no-ff feature/xxx
1.3 项目分支操作流程示例
切到 develop 分支,更新 develop 最新代码
git checkout develop
git pull --rebase
新建 feature 分支,开发新功能
git checkout -b feature/train/crn
…
git add .
git commit -m “feat(rob): 抢票详情页改成 CRN 页面”
其他提交
…
如果此时 develop 分支有一笔提交,影响到你的 feature 开发,可以 rebase develop 分支,前提是 该 feature 分支只有你自己一个在开发,如果多人都在该分支,需要进行协调:
切换到 develop 分支并更新 develop 分支代码
git checkout develop
git pull --rebase
切回 feature 分支
git checkout feature/train/crn
git rebase develop
如果需要提交到远端,且之前已经提交到远端,此时需要强推(强推需慎重!)
git push --force
完成 feature 分支,合并到 develop 分支
切到 develop 分支,更新下代码
git check develop
git pull --rebase
合并 feature 分支
git merge --no-ff feature/train/crn
删除 feature 分支
git branch -d feature/train/crn
推到远端
git push origin develop
当某个版本的 feature 分支均合并到 develop 分支,切出 release 分支,提交测试并进行 bug fix
当前在 develop 分支
git checkout -b release/20180614 develop
在 release/20180614 分支进行 bug fix
git commit -m “fix(rob): 抢票页面座席添加判空”
…
所有 bug 修复完成,准备发布新版本
master 分支合并 release 分支并添加 tag
git checkout master
git merge --no-ff release/20180614
添加版本标记,这里可以使用版本发布日期或者具体的版本号
git tag 20121221
develop 分支合并 release 分支
git checkout develop
git merge --no-ff release/20180614
删除 release 分支
git branch -d release/20180614
至此,一个新版本发布完成。
-
提交信息规范
git commit 格式:():
type 类型,提交的类别
feat: 新功能
fix: 修复 bug
docs: 文档变动
style: 格式调整,对代码实际运行没有改动,例如添加空行、格式化等
refactor: bug 修复和添加新功能之外的代码改动
perf: 提升性能的改动
test: 添加或修正测试代码
chore: 构建过程或辅助工具和库(如文档生成)的更改
scope 修改范围主要是这次修改涉及到的部分,简单概括,例如 login、train-order
subject 修改的描述
具体的修改描述信息
范例:
feat(hotel-detail): 酒店详情页添加 AB 测试
fix(login): 登录页面错误处理
test(crn): CRN 添加测试代码 -
提交建议
多次提交,避免一次提交大量改动
每次提交时察看提交文件,明确提交的具体内容
提交信息规范化,描述具体的提交信息,避免泛化的提交信息,例如“添加新功能”、“bug fix”