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

Bry*_*yce 17 version-control mercurial

我知道Mercurial for Beginners:The Definitive Practical GuideMercurial合并分支的答案?(abort:push创建新的远程分支)

在这里,我无意中创造了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
Run Code Online (Sandbox Code Playgroud)

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

hg merge
abort: outstanding uncommitted merges
Run Code Online (Sandbox Code Playgroud)

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

ica*_*bod 10

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

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

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

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

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


Sta*_*iel 7

摆脱变化(前487和488):如果你觉得(像我一样)重新克隆存储库,如上所述甚至官方推荐这里是荒谬的,那么你应该得到MqExtension

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

hg strip 487
hg strip 488
Run Code Online (Sandbox Code Playgroud)