自上次合并以来,未对目标分支进行任何提交,为什么GitLab会说存在冲突?

时间:2018-09-07 01:34:23

标签: git gitlab git-merge merge-conflict-resolution

我们将GitLab.com用于我们的项目。我们正在将代码从质量检查分支(master)合并到发布分支(qa)中。自一个月前发布最新版本以来,没有分支提交到master分支。

对于几个项目,自动合并在GitLab的UI中失败,我必须通过命令行手动进行操作通过GitLab的UI解决冲突。我不了解这种情况如何发生,因为master上没有与之冲突的更改。

qa      --●--●--●--●--●--
           \           \
master  ----●-----------●--

合并冲突后,我最终还是从qa分支(git merge -X theirs)进行了所有更改。也不是所有文件(感谢!),其中5个文件只有5-10个更改,而50个文件中只有300个更改。

但是我只是不明白是什么引发了这些冲突。

注意:合并到qa时,我确实压缩了master的所有提交。现在,我认为这可能是问题的一部分。仍然不确定如何。

1 个答案:

答案 0 :(得分:2)

我想我找到了问题。在一个简单的依赖项目中,它就发生了,因此很好地举例说明了。

完全无法在UI 中运行的合并(必须通过CLI在本地解决的合并)被合并,而没有我要描述的问题。我已经更新了问题以反映这一点。

问题在于,GitLab会在合并之前按所需方向从目标分支到源分支进行自动合并提交。我验证了具有“冲突”的项目都发生了这些不良合并。它们也是没有手动合并的项目。

$ git log --abbrev-commit --graph qa master

*   commit 92xxx (tag: v1.3.1, tag: v1.3.0, origin/master, origin/HEAD, master)
|\  Merge: 83xxx 7fxxx
| | Author: Nick
| | Date:   Fri Sep 7 00:52:37 2018 +0000
| |
| |     Merge branch 'qa' into 'master'
| |
| |     v1.3
| |
| |     See merge request translations!17
| |
| * commit 7fxxx
|/  Author: Nick
|   Date:   Fri Sep 7 00:52:37 2018 +0000
|
|       v1.3
|
| *   commit c14xxx (HEAD -> qa, origin/qa)
| |\  Merge: 76xxx 83xxx
| |/  Author: Nick
|/|   Date:   Fri Sep 7 00:52:29 2018 +0000
| |
| |       Merge branch 'master' into 'qa'
| |
| |       # Conflicts:
| |       #   langs/en-US.json
| |
* |   commit 83xxx (tag: v1.2.1, tag: v1.2.0)
|\ \  Merge: 08xxx 73xxx
| | | Author: Nick
| | | Date:   Fri Aug 3 14:09:04 2018 +0000
| | |
| | |     Merge branch 'qa' into 'master'
| | |
| | |     Merge for v1.1.2
| | |
| | |     See merge request translations!13
| | |
m   qa

master是左行。 83xxx与上一个版本的合并。 master自上次发行以来没有提交,除了这种莫名其妙的错误合并。

因此,这说明了冲突。在GitLab的用户界面中打开合并请求后,这些冲突会立即出现,因此我猜测合并请求的创建是导致错误的合并提交的原因。也许使用了“压缩提交”复选框(可以在创建合并请求时选择它,也可以使用已经打开的合并请求的合并操作来选择它。)

不知道为什么GitLab这样做,可能是一个错误。下次创建具有这些怪异冲突的合并请求时,我将让它们处于打开状态,以查看它是否确实在创建过程中创建了错误的合并请求。

2018年12月更新

再次发布时间。我注意了仍不是100%知道发生了什么。对翻译项目发起合并请求,自上次来自master的合并以来,该项目对qa的提交次数为零。

冲突。看着他们。没有任何意义。在另一个选项卡中刷新存储库时没有注意到任何提交。完成冲突解决后,单击UI中的“解决冲突”,创建了master-> qa的提交。这只是Gitlab实现的合并方式。通过将母版放入质量检查中,然后再合并起来,可以解决冲突。字面上是在用户界面的冲突解决页面中说的

或其他。令我发疯,但在发布之日没有时间进行Dally-Dally。