我知道Mercurial for Beginners: The Definitive Practical Guide和Mercurial 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
显示了我没有做出的各种改变。我愿意重新应用我的更改...我怎样才能将这一切全部带回一个提示,放弃所有本地更改?
答案 0 :(得分:10)
看起来当你完成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
- 你说你不介意重新应用你的更改),这是最简单的选择求助扩展只是重新克隆存储库并从那里继续工作。
答案 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 。