我有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个新的提交意味着非推送提交。
所以我试图将我的更改推送到服务器。 xyz
,feature
分支都正在推动。但是develop
分支无法推送更新的提交并显示错误,如下所示。
"remote: Merge commits where all parents are from the same branch are not allowed."
请建议我。提前谢谢。
答案 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
的中间位置。)