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

AP2*_*257 8 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
|  
Run Code Online (Sandbox Code Playgroud)

看起来有人在repo中创建了一个新的分支,这很好:我只是想将我的更改推送到默认分支,但我不知道如何.

如何推动变更集576?我是否需要指定它是分支默认值?

Obe*_*nne 10

Mercurial的push命令可以-r选择限制推送到给定修订的更改:

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

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

$ hg push -r default
Run Code Online (Sandbox Code Playgroud)

这将忽略你的mongo分支.您也可以使用特定修订来代替分支名称:

$ hg push -r 576
Run Code Online (Sandbox Code Playgroud)

显然,只要修订版576是默认分支的提示,两个命令都具有相同的效果.

另外,有一个方便的快捷方式,只使用句点作为修订说明符来推送当前检出的工作副本的父修订:

$ hg push -r .
Run Code Online (Sandbox Code Playgroud)


Bin*_*ile 5

还有其他事情发生,因为远程分支mongo不会导致多头中止,同一分支上只有多个头.[更新:实际上,你得到一个远程分支中止,类似于远程头中止,除非你Push new branch像我一样检查了你的TortoiseHg的同步菜单.

无论原因如何,正确的程序是提交您的本地仓库(您已经完成),然后远程更改,它们与您的合并,提交结果,最后合并的更改送到仓库.

有一个扩展称为fetch帮助将此过程合并为一个步骤.你可以在这里了解更多相关信息.

不要只是强迫推送到远程回购!这只是为了避免合并的责任,甚至可能会破坏一些东西,例如依赖于在不分支线上进行所有更改的构建系统.至少你会混淆或激怒你正在与之合作的人.除非这是你的意图,在这种情况下,全力以赴.:)

在开始这样做之前,您确实需要阅读一些有关协作的基础知识.从这里开始.