问题描述
上周上线, 把分支合并到master后上线,结果出现了有bug,发现是代码合并有问题,但是在合并过程中git对该文件的处理并没有提示给我任何的冲突信息,合并代码怎么被覆盖的呢?经过一番思考,过程是这样的,不合理的git 模型使用会出现一些问题。
分支A 和master
1 在master上进行了部分bug修改
2 在分支A上同时开发新功能。
3 合并分支的时候,先把master的内容合并到分支上(把master上修改的bug合并到A分支上,这样可能会把A上最新修改的文件覆盖掉)
4 再把分支的内容合并到master上。
这样操作,可能会把分支A中的最新的一部分代码覆盖掉,master merge 到A, A再merge到master上, 这样两个分支的耦合性太大,所以会出现代码覆盖问题。
问题的解决
1 如果不改变git branch modle的话, 我们注意最好不要把master 的合并到分支上,只有分支合并到master上。
2 改变模型,在master不做bug的修改。master不做任何修改,master主干是各个分支合并过来,在修改bug的时候,建立了一个hotfix分支,这样再进行合并。
不同的分支 有不同的用途,和master分支解耦合,并且每个分支有自己相对应的父分支,一般是子分支合并到父分支上,父分支一般不合并到子分支。如下图分支模型
综上:
1 两个分支不要互相耦合
2 有时候有文件冲突是好事,没有文件冲突则可能会有更大的问题。
3 知之为知之,不知为不知,是知也。