已拉动所有变化时强制推向新头

时间:2012-02-13 17:05:31

标签: mercurial branch push dvcs

推送时是否可以强制创建新的远程头?

假设我在分支“default”上做了一些本地提交,然后从远程拉出并合并。

现在,我想将我的提交推送到远程创建新的头部和书签,但保留现有的远程头部和尖端 - 即。在做hg fetch时,我的同事不应该得到我的更改。

基本上,这应该是一个短期分支(因此不是命名分支),以便在完全合并到默认分支的“主”头之前进行备份和代码审查。

我已经尝试了--new-branch但它没有帮助 - 没有创建新的头部并且远程提示移到了我的头上。

3 个答案:

答案 0 :(得分:1)

您可以使用--force选项强制创建新头。

--new-branch选项用于命名分支,在您的情况下,我们讨论的是匿名分支。

“提示被移动”的原因是因为您合并了最近提取的变更集。这样做,就没有办法做你想做的事。

你应该从遥控器中提取新的更改,并强制推送所有内容而不合并,这将创建一个新的头(称为匿名分支),稍后可以由您或其他人合并到默认分支。代码审查。

您还可以使用第二个存储库来推送您的更改,但这是一个完全不同的工作流程。

答案 1 :(得分:1)

推送时无法保留tip:它是一个伪标签,始终指向存储库中的最新变更集。 Mercurial中不推荐使用tip的概念,因为tip可以根据推送的顺序或多或少随意改变含义 - 正如您所见。

创建一个新头的唯一方法就是创建它:-)我的意思是你需要两个头 - 一个带有你的变化,另一个带有你想要的主要代码大学拉动和合并。只有一个头(运行hg merge后得到的头),没有办法向大学发出不应该使用它的信号。

更好的更好的方法是在服务器上使用单独的存储库。转到您的存储库管理软件并为您的更改创建一个分支。然后推进并告诉你的大学审查它。他们会从您的克隆中拉出来并查看更改。如果他们喜欢他们,那么他们可以与主代码合并并推送到正常的回购。如果他们不喜欢这些更改,那么他们可以丢弃他们的本地克隆,删除更改集,或者只是回滚拉。

答案 2 :(得分:1)

我对这个问题的解决方案是使用先前的修订版来开始书签,如果没有,或者你只是不想,你可以进行虚拟提交(比如对README文件的小改动等) 。)并在此之前为修订添加书签。

我认为hg书签在变成git分支之前需要进行大量的微调,但我描述的过程几乎就是mercurial bookmarks kick starter中解释的内容。

例如,如果您目前处于修订版250。

echo >>README
hg ci -m "enabling bookmark branch_xyz"
hg book my-tip # optional but nice to have
hg book -r 250 branch_xyz
hg up branch_xyz
# hack ... hack hack
hg ci -m "awesome feature xyz (in progress)"
hg push -fB branch_xyz 

现在这个书签存在于服务器上供其他人使用......但以后可以轻松修剪