我正在使用Mercurial而且我是一个新手。我刚刚成功更改了我的仓库,然后成功运行hg pull
和hg update
- 没有合并,也没有出现冲突。
然后我试图推送到远程仓库,并得到了可怕的:abort: push creates new remote heads!
hg glog
显示以下内容:
@ changeset: 576:c4c58970f141
| tag: tip
| user: me
| parent: 566:70e287df5439
|
| o changeset: 575:7ae70ddd2b6e
| | branch: mongo
| |
| o changeset: 574:904da90475ef
| | branch: mongo
| |
| o changeset: 567:cad7a006965b
|/ branch: mongo
|
o changeset: 566:70e287df5439
| user: me
|
看起来有人在回购中创建了一个新分支,这很好:我只是想将我的更改推送到默认分支,但我不知道如何。
如何推送变更集576?我是否需要指定它是分支默认值?
答案 0 :(得分:10)
Mercurial的 push 命令具有-r
选项,可以限制推送到给定修订的更改:
如果使用-r / - rev,则指定的修订版及其所有祖先都将是 推送到远程存储库。
这意味着您还限制了您要推送的分支。要将所有更改推送到默认分支的末尾,您可以运行:
$ hg push -r default
这将忽略您的 mongo 分支。您也可以使用特定修订版代替分支名称:
$ hg push -r 576
显然,只要修订版576是默认分支的提示,两个命令都具有相同的效果。
在旁注中,有一个常用的快捷方式,只使用句点作为修订说明符来推送当前检出的工作副本的父修订:
$ hg push -r .
答案 1 :(得分:5)
还有其他事情正在发生,因为像mongo
这样的远程分支不会导致多头中止,同一分支上只有多个头。 [更新:实际上,你做得到一个远程分支中止,类似于远程头中止,除非你像我一样在你的TortoiseHg的同步菜单中检查Push new branch
。]
无论原因如何,正确的程序是提交您的本地仓库(您已完成),然后拉远程更改,合并与您的,提交结果,最后,将合并后的更改推送到回购。
有一个名为fetch
的扩展程序,可帮助将此过程合并为一个步骤。您可以详细了解here。
不要只是强迫推送到远程仓库!这只是为了避免合并的责任,甚至可能会破坏一些东西,例如依赖于在不分支线上进行所有更改的构建系统。至少你会混淆或激怒你正在与之合作的人。除非这是你的意图,在这种情况下,全力以赴。 :)
在开始之前,您确实需要阅读一些有关协作的基础知识。开始here。
答案 2 :(得分:4)
请参阅最近关于此
的讨论Mercurial总是会抱怨在遥控器上创建新头。在创建新头时,您必须使用--force或--new-branch。
[编辑:]
这是为了让用户意识到他正在远程存储库中引入多个头。通常的做法是不使用push命令创建头。如果要在远程仓库上创建多个头(通常是中央仓库)。
正如Binary Phile所说,完美地说,这会导致合并向上推进。哪个不好。