水星,简化多头怪物

时间:2018-10-20 20:50:22

标签: mercurial

我与一位同事共享一个在线Mercurial存储库。来到一个复杂的情况:

在A站上,一团糟,不得不备份一些修订。创建了一个克隆,在其中添加了新代码,然后手动将更改合并到该克隆中。

  1. 无法推动,我现在有多个头脑。给其中一个命名为命名分支并不能解决任何问题。经过一番研究,我的回答是关闭了所有我真正想要的头部。好主意?好主意吗?

  2. Push将创建一个新的远程头。花了足够的时间在上面,我选择了-f。有效。但是我真的很希望这是已经存在的头部的真实和正确的延续。但不是真正的合并,而是用我的新代码文件集完全替代。怎么样?

  3. 去B站进行拉动,我没有得到最新的想要的头,而是得到了我关闭时的原始头,但它是最后一个真实版本。我正在四处寻找如何告诉“拉”命令来获得另一个头。我怎么做?如何查询服务器包含的头或分支,以便能够智能地选择一个?

更多信息:

Station A视图: Station A view 拉后的站B视图: enter image description here

1 个答案:

答案 0 :(得分:2)

我看到了许多问题:

1)您试图使用clone摆脱问题。熟悉Mercurial之后,您会发现有更好的方法来解决您描述的问题类型。

您的描述不清楚您对克隆采取了哪些步骤。例如,您是使用错误代码从主远程存储库还是从本地存储库克隆的。

2)当您尝试推动时,它发出警告,警告您在远程存储库上创建多个磁头。通过使用-f选项进行hg push,您的问题就升级了。您最终在远程存储库中遇到了两个问题。使用push -f时要小心。它取代了Mercurials试图防止您造成问题的尝试。在远程存储库上创建多个头可能有充分的理由,但是最好要非常清楚,这正是您想要做的。

接下来,我将假设您将多个头推到了远程仓库中。

这时,最好的解决方案是将两个头合并为一个。

从您的描述来看,听起来您有类似以下内容:

hg log -G

@  changeset:   4:fa78b78c5094
|  tag:         tip
|  user:        Craig
|  date:        Sun Oct 21 10:38:15 2018 -0600
|  summary:     Good commit 2
|
o  changeset:   3:af5cfaf651ff
|  parent:      0:f46808ac779b
|  user:        Craig
|  date:        Sun Oct 21 10:38:02 2018 -0600
|  summary:     Good commit 1
|
| o  changeset:   2:aabb053f11a9
| |  user:        Craig
| |  date:        Sun Oct 21 10:37:44 2018 -0600
| |  summary:     Bad commit 2
| |
| o  changeset:   1:9168cd930d40
|/   user:        Craig
|    date:        Sun Oct 21 10:37:32 2018 -0600
|    summary:     Bad commit 1
|
o  changeset:   0:f46808ac779b
   user:        Craig
   date:        Sun Oct 21 10:18:32 2018 -0600
   summary:     Commit some work

在我的测试仓库中,我将执行以下操作以将这些头合并在一起:

hg update 4

hg merge 2

注意:如果只有两个头,则不带数字的hg合并将起作用。

您可能需要解决合并冲突。

一旦合并完成,它将为您的存储库保留修改后的文件(合并结果)。确保这些修改仅包含您想要的更改。

一旦您完全确定要进行的更改(作为合并的结果),就可以提交合并:

hg merge -m "Merge heads"

此时,您现在应该只有一个脑袋,如下所示:

@    changeset:   5:8f9e6a947b3a
|\   tag:         tip
| |  parent:      4:fa78b78c5094
| |  parent:      2:aabb053f11a9
| |  user:        Craig
| |  date:        Sun Oct 21 11:14:43 2018 -0600
| |  summary:     Merge heads
| |
| o  changeset:   4:fa78b78c5094
| |  user:        Craig
| |  date:        Sun Oct 21 10:38:15 2018 -0600
| |  summary:     Good commit 2
| |
| o  changeset:   3:af5cfaf651ff
| |  parent:      0:f46808ac779b
| |  user:        Craig
| |  date:        Sun Oct 21 10:38:02 2018 -0600
| |  summary:     Good commit 1
| |
o |  changeset:   2:aabb053f11a9
| |  user:        Craig
| |  date:        Sun Oct 21 10:37:44 2018 -0600
| |  summary:     Bad commit 2
| |
o |  changeset:   1:9168cd930d40
|/   user:        Craig
|    date:        Sun Oct 21 10:37:32 2018 -0600
|    summary:     Bad commit 1
|
o  changeset:   0:f46808ac779b
   user:        Craig
   date:        Sun Oct 21 10:18:32 2018 -0600
   summary:     Commit some work

在将合并的代码推送到远程存储库之前,非常重要的一点是,确认更改正确并经过测试。进行错误的合并只会使问题复杂化。

我最好的建议是花些时间并验证每个步骤是否符合您的期望和要求。