Mercurial:如何在封闭分支上用作祖先时忽略分支的多个头

时间:2017-01-30 17:11:35

标签: version-control mercurial

另一个git用户在这里被Mercurial分支混淆了。我已经做了一些我无法弄清楚如何撤消的事情,因此我无法推动我完全不相关的变化。任何帮助将不胜感激。

我认为这是故事:

  • 我开始在默认上开展工作。我意识到这是一个错误,因为它会成为PR,所以我在分支 feature1 上做了下一次提交。然后我在bitbucket上提交了一份公关。

  • 我开始处理其他事情,也是从默认开始,这次我肯定会使用分支 feature2 ,我故意“hg up -r ...“在我的 feature1 提交之前使用修订号,以便不包含该更改。

此时历史看起来像是,

                   -- G (default) - H (feature1)
                  /
.. D - F (default)
                  \
                   -- I - J - K (feature2)
  • 我的PR未被接受,因此我关闭 feature1

  • 父存储库中存在默认开发,因此我hg pull。现在它看起来像,

                       -- G (default) - H (feature1) [my repository, closed]
                      /
    .. D - F (default)--- L (default) [parent repository]
                      \
                       -- I - J - K (feature2) [my repository]
    

..加上我不了解的其他分支上的大量更改。

  • 但我对 feature2 感到满意,我想为它做一个公关,所以我尝试hg push --new-branch,但我收到了消息,

    abort:push创建新的远程头7a341084eb8a!

好的,所以使用hg glog,看来校验和与父作品相对应,即上图中的L。 Mercurial似乎在抱怨我在一个封闭的分支上提交了一个尚未合并到default的分支default!但我不希望它再存在!但是,我不想剥离它,因为它会使阅读旧的,封闭的PR变得不可能。

如果我试图推动我自己的分支hg push --new-branch -b feature2,那么我得到:

abort: push creates new remote head 062efd5d0886!

即同样的问题,但头脑不同。这个似乎与 feature2 的第一个补丁相对应!也就是说,我的图表中为I

这没有任何意义.. 关闭分支阻止我在完全其他分支上推送更改。与此同时,我无法弄清楚在推送我的 feature2 分支时甚至会谈到多个头,因为实际上只有一个 feature2 。建议在推送之前“合并”,但我甚至无法弄清楚要合并的 。我不想在默认上合并我拒绝的更改,当我在 feature2 上执行hg merge default时,我想我可能需要考虑最新的上游更改,这将从我的已关闭分支而不是上游头部合并G

所以,显然,我只是不了解Mercurial分支机构。在git我只会删除 feature1 分支,那就是那个。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

  

但是我对feature2感到满意,我想为它制作一个PR,所以我尝试hg push --new-branch,但是我得到了消息,

abort: push creates new remote head 7a341084eb8a!

此时,revision L是分支default的负责人,您正在尝试发送revision G。修订版G位于default分支中,因此您将创建另一个头部。分支feature1已关闭,但default中的revision G分支未关闭。您可以更新 revision G关闭分支,或合并 revision L

  

如果我试图推动我自己的分支,hg push --new-branch -b feature2,   然后我明白了:

abort: push creates new remote head 062efd5d0886!

如果revision I分支中有default,则您遇到与上述相同的问题。

如果没有,请尝试hg push -r <rev number of revision I>