0

我刚开始使用 hg Mercurial 存储库并陷入了多个 HEADS 的情况。我过去也将我的代码推送到存储库,但它也从当前代码中丢失。在我看来,每次其他人推送他的代码时,我的默认人数都会增加,但我在其他任何机器上都看不到这种行为。任何人都可以帮助它,我怎样才能摆脱这些头并且不失去我的推动力?

注意:我正在使用带有 eclipse mercurial 插件的 MAC OSX。

4

2 回答 2

3

据我现在了解您的问题,您正在推送到存储库,并且还有其他人使用相同的存储库。正确的?

对我来说,您似乎没有处理最新的提交,因此在您当前的分支上创建了多个头。此外请注意:Mercurial 中的头部和分支之间存在一些差异。

我可以想象这样的事情会发生在你身上(假设我们只在一个分支上工作):

您的工作副本:

1-2-3-4-5-6 (where number is revision)

所以你正在提交r6,例如两次提交7'8'.
现在您的工作副本如下所示:

1-2-3-4-5-6-7'-8'

但与此同时,您都推入/拉出的共享存储库看起来像这样:

1-2-3-4-5-6-7-8-9-10 (so r10 is the 'latest' commit published)

现在,如果您要推送到共享存储库,则会发生这种情况:

            7'-8'
           /
1-2-3-4-5-6-7-8-9-10

瞧,现在有两个不同的头,称为8'10

将来,首先从共享存储库中提取并更新最新提交将防止您出现此问题。

现在,由于您的问题是如何解决多个头,因此有不同的选项,对您来说最容易的是进​​行简单的合并。

hg help merge

根据头是否仅在本地(查看您的头/提交的阶段),您有更多(也许更优雅)选项,例如rebase

一般来说,是一个很好的开始/深入使用 Mercurial 的资源。

于 2013-01-22T05:27:02.250 回答
2

已经提供了一些很好的一般信息,但我将提供一些 MercurialEclipse 特定信息。

  • 理解 Mercurial 的关键是历史图表。(在导航器视图中右键单击并选择 Team -> Show History)。注意左列是图表。将提交后的图表与提交前的图表进行比较。还要比较拉之前的图表和拉之后的图表。
  • 在 Mercurial 中,提交变更集并不意味着对其他人可见。只有推送的变更集对其他人可见
  • 一般来说,要解决这种情况,您应该合并所有头(团队 -> 合并),然后推送新的单个头。
  • 一旦你回到一个单一的头脑,一个人的工作流程应该
    • 在同步之前提交您的更改
    • 右键单击项目 -> 团队 -> 同步
    • 在同步视图中,右键单击传入节点并选择 Pull and Update。然后,这将提示您与传入的更改合并
    • 当您准备好推送您的更改时(您应该只有一个头并且没有任何传入),您可以通过右键单击传出节点在同步视图中执行此操作。推送变更集会推送所有祖先。
于 2013-01-24T18:12:51.813 回答