Mercurial:如何推送到默认分支?

时间:2010-11-30 23:36:34

标签: mercurial

我正在使用Mercurial而且我是一个新手。我刚刚成功更改了我的仓库,然后成功运行hg pullhg 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?我是否需要指定它是分支默认值?

3 个答案:

答案 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所说,完美地说,这会导致合并向上推进。哪个不好。