项目通常会有develop、master另个分支develop分支部署在测试环境测试,多个开发工程师把本身的commit都提交到develop分支,交给测试工程师来测试;master分支是上线分支,测试没问题的develop分支,在须要上线的时候合并到master分支。git
保持master和develop提交历史一致,每次develop合并到master的时候不会出现冲突,保证线上的代码和测试环境环测试完成的代码一致,避免由于合并代码引发线上出问题。测试
有时候须要临时上线,能够基于master分支创建hotfix分支,测试后合并到master分支。ip
hotfix分支和develop分支是并行的,hotfix分支合并到master分支后,须要同时合并到develop分支,保证develop分支和master分支提交历史一致。开发
hotfix分为两种状况:部署
A:hofix和develop分支没有修改相同文件,不会出现冲突it
1)master分支:ast
a -> b 并行
2)develop分支项目
a ->b -> c commit c修改了文件x文件
3)hotfix分支
a->b-> c1 commit c1 修改了文件y
合并操做以下:
1)master merge hotfix
master: a->b->c1
2) develop rebase master
develop: a->b->c1->c 该过程当中不会出现冲突(由于没有修改相同文件)
B:hotFix和develop分支修改相同文件,出现冲突
1)master分支:
a -> b
2)develop分支
a ->b -> c commit c修改了文件x
3)hotfix分支
a->b-> c1 commit c1 修改了文件x
合并操做以下:
1)master merge hotfix
master: a->b->c
2) develop rebase master
develop: a->b->c1->c2
该过程当中出现冲突(由于修改了相同文件),须要手动修改冲突,肯定最终x文件的版本。commit c2是在c版本上解决冲突后的版本
按照上述流程修改后,develop合并master不须要解决冲突
tip: merge的时候请包含提交的commit信息,使用下面命令操做,这样方便查看历史记录
git merge master --log --no-ff