如何在mercurial中撤消“abort:push在分支上创建新的远程头”

时间:2013-04-05 17:57:24

标签: version-control mercurial

我知道Mercurial for Beginners: The Definitive Practical GuideMercurial merge branches? (abort: push creates new remote branches)

等答案

在这里,我无意中创造了Mercurial想要创建一个新的远程头的情况。解决这个问题的最佳方法是什么,并且在远程端留下很少或没有这个错误的痕迹?

###> hg push
pushing to http://example.com
searching for changes
abort: push creates new remote heads on branch 'default'!
(did you forget to merge? use push -f to force)

###> hg revert --all -r tip

###> hg update -C
0 files updated, 0 files merged, 0 files removed, 0 files unresolved

###> hg incoming
comparing with http://example.com
searching for changes
no changes found

###> hg summary
parent: 488:e3db024fe901 tip
 Misc.
branch: default
commit: (clean)
update: 6 new changesets, 2 branch heads (merge)

###> hg pull
pulling from http://example.com
searching for changes
no changes found

###> hg glog
@  changeset:   488:e3db024fe901
|  tag:         tip
|  summary:     Misc.
|
o  changeset:   487:b207579b9d41
|  parent:      480:ce775708800c
|  summary:     Misc.
|
| o  changeset:   486:59a7a5b34c7f
| |  user:        other
| |  summary:     fixes
| |
| o  changeset:   485:b28264333e18
| |  user:        other
| |  summary:     binary

如果我合并,那似乎没问题:

hg merge
abort: outstanding uncommitted merges

但是hg diff显示了我没有做出的各种改变。我愿意重新应用我的更改...我怎样才能将这一切全部带回一个提示,放弃所有本地更改?

3 个答案:

答案 0 :(得分:10)

看起来当你完成hg merge时,你还没有提交生成的变更集。

当您在另一个分支中合并时(在您的情况下,您可能需要指定hg merge 486以合并其他用户更改),它会将该分支合并到您的工作目录中。然后,您需要使用合并工具检查所有冲突是否已解决(如果有),或者手动编辑文件(然后在任何冲突上运行hg resolve)。完成此操作后,您需要hg commit新的合并变更集。

这可以解释为什么hg diff会为您提供许多您未做出的更改 - 它们是在另一个分支上进行的更改,您尚未提交。如果您在工作目录中运行hg summaryhg parents,则应该会看到列出的两个父项:486488。您应hg commit此工作目录,创建新的合并489

如果要撤消当前合并并重新开始,则尝试运行hg update -C是正确的,这会将您的工作目录设置回其原始(未合并)状态。

如果你想摆脱你的更改(487488 - 你说你不介意重新应用你的更改),这是最简单的选择求助扩展只是重新克隆存储库并从那里继续工作。

答案 1 :(得分:7)

摆脱变化(前487和488): 如果您觉得(正如我所做的那样)按照上面的建议重新克隆存储库甚至是officially recommended here都是荒谬的,那么您应该得到MqExtension

启用Mq后,您可以轻松删除不需要的更改:

hg strip 487
hg strip 488

答案 2 :(得分:2)

我没有合并,但突然间我正在查看op发布的消息。当我执行 hg pull 时,在命令行中显示 abort!repository default found not found