不允许所有父母来自同一分支的合并提交

时间:2014-04-09 14:16:36

标签: git version-control github merge git-branch

我有3个分支,即develop, feature, xyz。现在我在xyz分支机构工作并在这里提交。然后我按照这些步骤进行了

git checkout feature
git merge xyz

- 这里它复制了该提交,并创建了另一个提交“merge:prev_commit latest_commit”。所以在feature我有2个新的提交意味着非推送提交。

git checkout develop
git merge xyz

- 这也是同样的事情。它复制了该提交,并创建了另一个提交“merge:prev_commit latest_commit”。所以在feature我有2个新的提交意味着非推送提交。

所以我试图将我的更改推送到服务器。 xyzfeature分支都正在推动。但是develop分支无法推送更新的提交并显示错误,如下所示。

"remote: Merge commits where all parents are from the same branch are not allowed."

请建议我。提前谢谢。

1 个答案:

答案 0 :(得分:3)

我强烈怀疑你是否遇到了针对常见Git问题的远程存储库防御机制:滋扰合并。

Git的许多用户更喜欢保持线性或大部分线性历史,而不会分散注意力,滋扰"迷你合并"这是由于开发人员在将上游更改与本地工作集成时执行git pull --merge而不是git pull --rebase而导致的。听起来好像你的远程回购可能会对这个常见问题进行防御性检查。

可能限制是特定于分支的:在feature上,您可以使用它,但不能在develop上。

进一步假设,由于远程存储库要么不知道xyz分支,要么{{1}关于推送合并时本地xyz工作的远端的分支已经过时了。

换句话说,xyz上合并的第二个父项具有SHA,该SHA与远程端上的任何分支都不对应。也许遥控器在那个父节点上运行类似develop的东西,并且它是空白的。

虽然你说git rev-parse --abbrev-ref <SHA>正在推进,但顺序很重要:必须首先推送xyz,以便分支在遥控器上是最新的,然后遥控器可以理解第二个合并父项是指xyz

如果xyz完全是最新的,但xyz推送被拒绝,则表明遥控器上的逻辑错误。

(还有一种可能性,就是develop不会落后于遥控器,而是遥遥领先。如果将过时的本地xyz合并到xyz并且推送,该哈希与远程上的当前develop不对应。该哈希指向某处xyz的中间位置。)