我与一位同事共享一个在线Mercurial存储库。来到一个复杂的情况:
在A站上,一团糟,不得不备份一些修订。创建了一个克隆,在其中添加了新代码,然后手动将更改合并到该克隆中。
无法推动,我现在有多个头脑。给其中一个命名为命名分支并不能解决任何问题。经过一番研究,我的回答是关闭了所有我真正想要的头部。好主意?好主意吗?
Push将创建一个新的远程头。花了足够的时间在上面,我选择了-f。有效。但是我真的很希望这是已经存在的头部的真实和正确的延续。但不是真正的合并,而是用我的新代码文件集完全替代。怎么样?
去B站进行拉动,我没有得到最新的想要的头,而是得到了我关闭时的原始头,但它是最后一个真实版本。我正在四处寻找如何告诉“拉”命令来获得另一个头。我怎么做?如何查询服务器包含的头或分支,以便能够智能地选择一个?
更多信息:
答案 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
在将合并的代码推送到远程存储库之前,非常重要的一点是,确认更改正确并经过测试。进行错误的合并只会使问题复杂化。
我最好的建议是花些时间并验证每个步骤是否符合您的期望和要求。