Git多分支冲突
在多分支的管理中,很多时候会出现分支冲突的问题。出现冲突分为release分支和test之前的冲突,以及其他开发相关分支的冲突。release和test的冲突我们用新的conflit_resolver分支来处理。这里我们讨论开发分支相关的冲突。
产生的冲突
远端有一个test分支,本地和远端test分支同步。 我们从test分支拉取了一个feat分支来开发新功能,然后从test分支拉取了一个fix分支来修复一个bug。
在仓库中,提交了一个feat分支合并到test的mr,还有一个fix合并到test的mr,这时候将fix分支的mr进行合并通过。
现在的分支情况是,test分支多了一个fix分支中的提交,而feat分支落后于test分支,然而feat分支中有个修改和fix分支合并的一个地方重叠了,这样在feat合并到test的时候会出现bug。
解决冲突
通过创建新提交解决
merge之后,用新提交来处理冲突,然后再合并。
通过rebase解决
git checkout feat
git rebase test
输入rebase之后,就开始变基了。
变基会比对feat分支和test,找到第一个不相同的提交,然后从这个不同的提交开始把feat分支的提交往test分支上插入。
这样会按提交的记录来,一个一个的解决完冲突,最后就能把test的分支合到feat上去了,并且没有产生新的提交。
保持最纯粹的提交历史,在很多情况下是有帮助的。如果用merge squash这些来让提交从多个+10/-2等,变成一个+100/-100的变更记录,这会让提交变得很没关但是会很难阅读。所以,合理的使用提交压缩。