我知道Mercurial for Beginners: The Definitive Practical Guide和答案,比如Mercurial merge branches?(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
如果我合并,它似乎没问题:
hg merge
abort: outstanding uncommitted merges
但是hg diff
显示了所有我没有做的改变。我愿意重新应用我的更改……我怎样才能把这一切都归结为一个技巧,放弃所有的局部更改?
看起来当您完成了hg merge
时,您还没有提交结果变更集。
当您合并到另一个分支(在您的情况下,您可能需要指定hg merge 486
来合并到其他用户更改中),它将合并到您的工作目录中。然后,您需要通过使用合并工具或手动编辑文件(然后在任何冲突上运行hg resolve
)来检查是否解决了所有冲突(如果有的话)。一旦完成,您需要hg commit
您的新,合并的变更集。
这就解释了为什么hg diff
给了你很多你没有做的更改——它们是在其他分支上做的更改,你还没有提交。如果在工作目录中运行hg summary
或hg parents
,应该会看到列出两个父目录:486
和488
。你应该hg commit
这个工作目录,创建一个新的合并的489
。
如果你想撤销当前的合并并重新开始,你尝试运行hg update -C
是正确的,它将把你的工作目录设置回原来的(未合并的)状态。
如果您想要摆脱您的更改(487
和488
-您声明您不介意重新应用您的更改),无需诉诸扩展的最简单的选择是重新克隆存储库并从那里继续您的工作。
删除更改(ex 487和488):如果您(像我一样)觉得重新克隆存储库(如上所述甚至这里的官方推荐)是荒谬的,那么您应该使用MqExtension
启用Mq后,您可以轻松删除不想要的更改:
hg strip 487
hg strip 488
我没有合并,但突然我正在查看op发布的消息。当我执行hg pull时,在命令行中显示abort !