17

我知道Mercurial for Beginners: The Definitive Practical GuideMercurial 合并分支之类的答案?(中止:推送创建新的远程分支)

在这里,我无意中创建了 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显示了我没有做的各种改变。我愿意重新应用我的更改...我怎样才能将这一切恢复到一个提示,放弃所有本地更改?

4

3 回答 3

11

看起来当你完成了一个hg merge,你还没有提交结果变更集。

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

这可以解释为什么hg diff会给你很多你没有做的更改——它们是在另一个分支上所做的更改,你还没有提交。如果您运行hg summaryhg parents在您的工作目录中,您应该看到列出了两个父级:486488. 您应该hg commit在这个工作目录中创建一个新的合并489.

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

如果您想摆脱您的更改(487并且488- 您声明您不介意重新应用您的更改),不求助于扩展的最简单的选择就是重新克隆存储库并从那里继续您的工作。

于 2013-04-08T11:43:30.630 回答
7

摆脱更改(例如 487 和 488):如果您(和我一样)觉得重新克隆存储库,如上所述甚至官方推荐这里是荒谬的,那么您应该获得MqExtension

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

hg strip 487
hg strip 488
于 2013-09-22T09:48:54.603 回答
2

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

于 2014-05-23T18:31:55.803 回答