Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mercurial:如何推送到默认分支?_Mercurial - Fatal编程技术网

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

Mercurial:如何推送到默认分支?,mercurial,Mercurial,我用的是Mercurial,有点新手。我刚刚成功提交了对回购协议的更改,然后成功运行了hg pull和hg update——没有出现合并和冲突 然后我试着推到远程回购,得到了可怕的结果:abort:push创建了新的远程头 hg glog显示以下内容: @ changeset: 576:c4c58970f141 | tag: tip | user: me | parent: 566:70e287df5439 | | o changeset:

我用的是Mercurial,有点新手。我刚刚成功提交了对回购协议的更改,然后成功运行了
hg pull
hg update
——没有出现合并和冲突

然后我试着推到远程回购,得到了可怕的结果:
abort:push创建了新的远程头

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?我是否需要指定它是默认的分支

查看最近关于此的讨论

Mercurial总是抱怨在远程设备上创建新的头。创建新头部时,必须使用--force或--new分支

[编辑:]

这特别是为了让用户知道,他正在远程存储库中引入多个头。通常的做法是不使用push命令创建头部。如果要在远程回购(通常为中央回购)上创建多个磁头

正如二元Phile完美地说的那样,这会导致向上推动合并。这不好

Mercurial的push命令具有
-r
选项,可将push更改限制在给定版本内:

如果使用-r/--rev,则指定的版本及其所有祖先版本将被删除 推送到远程存储库

这意味着您还限制了要推动的分支。要将所有更改推送到默认分支的顶端,可以运行:

$ hg push -r default
这将忽略您的mongo分支。您还可以使用特定修订,而不是分支名称:

$ hg push -r 576
显然,只要修订版576是默认分支的尖端,两个命令的效果都是相同的

另一方面,有一个常用的快捷方式,可以使用句点作为版本说明符,仅推送当前签出工作副本的父版本:

$ hg push -r .

由于像
mongo
这样的远程分支不会导致多头中止,只有同一分支上的多个头会导致多头中止,因此正在发生其他情况。[更新:实际上,您确实会得到一个远程分支中止,类似于远程头部中止,除非您像我一样在您的OrtoiseHG的同步菜单中选中了
推送新分支
。]

不管原因是什么,正确的过程是提交到本地repo(您已经完成了),然后拉取远程更改,将它们与您的更改合并,提交结果,最后将合并的更改推送到repo

有一个名为
fetch
的扩展,它有助于将此过程整合到单个步骤中。你可以了解更多

不要只是强迫推远程回购!这只是避免了对合并的责任,甚至可能会破坏一些东西,比如一个构建系统,它依赖于在一个不分支的行中进行所有更改。至少你会让你的同事感到困惑或恼火。除非这是你的意图,在这种情况下,全力以赴。:)


在开始合作之前,您确实需要阅读一些有关协作的基础知识。开始。

你确定你只想推一个新的头,不想与(来自或进入)这个分支合并吗?我绝对不想推到mongo分支:我想把它分开。我担心使用武力。我应该使用“-new branch default”之类的吗?@AP257:是的。最好使用“-new branch..”查看我的编辑。@AP257:您还应该查看Oben Sonne的答案,其中包含一个重要的考虑因素。有时,我们希望将对默认头的更改推送到远程存储库,并继续在本地拥有多个头。在这种情况下,他的答案也适用。这是一个很好的建议,但在这种情况下,似乎是想得太多了。他可能只需要首先拉取默认分支,以便进行合并/重基,从而避免创建远程头。