在git图中有这样的情况:
dev *
\_ featureA
\_ featureB
我请求将dev
分支的每个功能合并。
这两个功能是并行开发的,并且将在同一时间合并。
分支featureA
的合并请求已被接受,现在当我的同事想要合并featureB
时,他看到合并冲突,因为在根目录的CMakeLists.txt
中两个功能都添加了文件中的一行在同一个地方;在featureA
:
CMakelists.txt:10:
add_subdirectory(featureA)
featureB
中的:
CMakelists.txt:10:
add_subdirectory(featureB)
问题是他应该手动解决这个合并冲突,还是应该在本地重新分支featureB
分支然后重新分支,或者工作流程中可能存在问题,并且在进行此类分析时应采取其他方法情况?
答案 0 :(得分:1)
让我先说一下,这里没有正确或错误的解决方案 - 处理这样的合并冲突的方式取决于featureB
的分支类型。
featureB
是私人分支如果featureB
是私有分支 - 意味着您是唯一承诺它的人 - 那么我建议您在dev
之后将其重新绑定在featureA
之后{1}}已合并。
这意味着从这开始:
A--B---M dev
\ /
C--D featureA
\
E--F featureB
对此:
A--B---M dev
\ / \
C--D E--F featureB
请注意rebasing is still a kind of merge,不同之处在于git-rebase
一次只能应用一次提交,而git-merge
合并两个在一次操作中提交他们的整个更改。
执行rebase会强制您解决冲突 引入冲突更改的提交。这有几个好处:
featureB
是公共分支但是,如果featureB
是公共分支 - 也就是说,有多个人提交了它,那么就不能对其进行重新绑定,因为那将是rewriting history。在这种情况下,您最好在dev
分支上的常规合并中处理合并冲突。
结果历史将如下所示:
A--B---M------N dev
\ / \ /
C--D E--F featureB
其中N
是您解决冲突的地方。