这是我参与「第三届青训营 -后端场」笔记创作活动的第4篇笔记
由于在参加本次青训营之前我就已经有过对Git的初步学习和了解,所以这里我不想再将已经学会而且掌握的知识(Git基本命令以及工作流程)再次拿出来丢人现眼,这次大项目的经历使我对团队开发流程更加清晰了,同时也使我对git flow工作流有了更深入的了解与学习。
其中涉及到的主要分支类型有:
-
master分支,即主分支。任何项目都必须有个这个分支。对项目进行tag或发布版本等操作,都必须在该分支上进行。
-
develop分支,即开发分支,从master分支上检出。团队成员一般不会直接更改该分支,而是分别从该分支检出自己的feature分支,开发完成后将feature分支上的改动merge回develop分支。同时release分支由此分支检出。
-
release分支,即发布分支,从develop分支上检出。该分支用作发版前的测试,可进行简单的bug修复。如果bug修复比较复杂,可merge回develop分支后由其他分支进行bug修复。此分支测试完成后,需要同时merge到master和develop分支上。
-
feature分支,即功能分支,从develop分支上检出。团队成员中每个人都维护一个自己的feature分支,并进行开发工作,开发完成后将此分支merge回develop分支。此分支一般用来开发新功能或进行项目维护等。
-
fix分支,即补丁分支,由develop分支检出,用作bug修复,bug修复完成需merge回develop分支,并将其删除。所以该分支属于临时性分支。
-
hotfix分支,即热补丁分支。和fix分支的区别在于,该分支由master分支检出,进行线上版本的bug修复,修复完成后merge回master分支,并merge到develop分支上,merge完成后也可以将其删除,也属于临时性分支。
-
在团队开发过程中,如果我们想要在master分支上提交一个develop分支,则:
git branch develop master # 从master分支上新建develop分支
git checkout develop # 检出develop分支
# 此处可进行功能开发,并add和commit到develop分支
git push origin develop # 推送develop分支到远端的origin/develop
- 线上版本的代码(master分支)出现了紧急bug,需要修复。这里用到了hotfix分支。
git checkout master # 切换回master分支
git checkout -b hotfix master # 新建hotfix分支,并切换到该分支
...... # 做一些bug修复工作
git checkout master # 切换回master分支
git merge --no-ff hotfix # 合并hotfix分支,此时bug已被修复(无冲突)
git tag v0.2 # 新建tag v0.2
git push origin master # 推送master分支代码到远端
git push origin --tags # 推送tag到远端
- develop分支上的功能开发完成了,需要进行测试和提交。这里用到了release分支。
git checkout develop # 切换回develop分支
git checkout -b release01 develop # 新建release分支,并切换到该分支
....... # 做一些测试、bug修复等工作
git checkout develop # 切换回develop分支
git merge --no-ff release01 # 合并release01分支到develop分支(无冲突)
git push origin develop # 推送develop分支到远端
git checkout master # 切换回master分支
git merge --no-ff release01 # 合并release01分支到master分支(无冲突)
git tag v0.3 # 新建tag v0.3
git push origin master # 推送master分支代码到远端
git push origin --tags # 推送tag到远端
此时GitFlow的工作流是这样的:
- 这里可以继续develop分支,并不断push到远端。此时如果团队成员增加,多人需要开发不同的功能,这里就会用到feature分支。团队中的每个人都从Github克隆一个项目,然后新建自己的feature分支。
git clone xxxx.git
git checkout develop
git checkout -b feature-xx develop # 从develop分支新建并检出feature分支
假如A在本地进行一段时间的开发之后,准备提交一份新的代码到远程库:
git checkout -b feature-hu develop # 从develop分支新建并检出feature分支
# 这里可以进行一些功能开发,并不断的add和commit
git checkout develop # 切换回develop分支
git pull origin develop # 更新远端代码,看develop分支是否有更新(无更新)
git checkout feature-hu # 切换回feature分支
git rebase develop # 合并develop分支到feature分支,并解决冲突(无冲突)
git checkout develop # 切换回develop分支
git merge --no-ff feature-hu # 合并feature分支到develop分支
git push origin develop # 推送develop分支到远端
此时的GitFlow工作流为:
其他团队成员比如B,此时想要push一份关于自己开发的方面代码上去:
git checkout -b feature-zz develop # 从develop分支新建并检出feature分支
# 这里可以进行一些功能开发,并不断的add和commit
git checkout develop # 切换回develop分支
git pull origin develop # 更新远端代码,看develop分支是否有更新(有更新)
git checkout feature-zz # 切换回feature分支
git rebase develop # 合并develop分支到feature分支,并解决冲突(有冲突)
# 这里需要进行冲突解决
git add . # 解决完冲突之后执行add操作
git rebase --continue # 继续刚才的rebase操作
git checkout develop # 切换回develop分支
git merge --no-ff feature-zz # 合并feature分支到develop分支(无冲突)
git push origin develop # 推送develop分支到远端
如果团队成员在合并feature分支到develop分支后还需要继续开发,则检出自己的feature分支继续操作,并重复上述过程即可。这里需要注意--no-ff参数,其目的是让commit的流程更加清晰
最终经过检错、测试流程之后,需要再次新建release分支,最后的GitFlow 工作流是: