如何在Mercurial中克隆分支?

时间:2011-07-28 20:12:47

标签: mercurial bitbucket

假设我有一个善变的项目,我这样做:

hg branch whatever
touch newfile
hg add newfile
hg commit -m "added newfile" --close-branch
hg up -C default
hg merge whatever
hg push
abort: push creates new remote branch 'whatever'!
(did you forget to merge? use push -f to force)

如何删除分支以便hg branches -c不会在那里显示?令人沮丧的是,这不允许我推向bitbucket。我读了Documentation,但前两点我可能没有正确遵循(因为我一直得到错误,即使我合并了)。第三点,关于通过clone删除我不明白该怎么做,因为我总是最终在我的回购中使用功能分支。

3 个答案:

答案 0 :(得分:4)

如果whatever是一个好的,合法的分支(比如一个功能分支),并且你希望它在Bitbucket仓库中,你应该hg push --new-branch。没有这个转换,Mercurial认为,嘿,也许你根本不想推动这个分支,也许它是私有的,你将犯错。

如果您不希望whatever成为真正的命名分支,则可以使用bookmarks而不是命名分支。与命名分支不同,以后可以删除书签。

编辑:如果您想要实现的是在完成分支中的开发后使历史呈线性,那么您要做的是rebase。有两种情况:

Bitbucket仓库中没有新的变更集。在这种情况下,您只需删除书签并推送,因为没有要合并/变基的头。请注意,对于书签,A - D位于分支default中。

1 -- 2 -- 3 -- A -- B -- C -- D
               ^              ^
               your work      'whatever' bookmark

Bitbucket回购中的新变更集。你拉动,然后在Bitbucket回购提示之上重新设计你的工作,然后删除书签并推送。

               new changeset you pulled
               v
1 -- 2 -- 3 -- 4 -- 5 
            \
              A -- B -- C -- D
              ^              ^
              your work      'whatever' bookmark

hg rebase -B whatever使历史成为线性的:

               new changeset you pulled
               v
1 -- 2 -- 3 -- 4 -- 5 -- A -- B -- C -- D
                         ^              ^
                         your work      'whatever' bookmark

然后删除书签,然后按。

重新定位会创建新的更改集,因此请务必不要重新设置已推送的更改集。

答案 1 :(得分:2)

好吧,首先,你没有 删除该分支。

警告就是这样,警告你应该仔细检查你是否确实在做正确的事情,而不是将分支推到不属于它的地方。

但是,如果您想要保留分支,只需执行警告所说的内容,请使用-f选项进行推送:

hg push -f

现在,另一方面,如果您确实要将其删除,请按以下步骤操作:

如果您启用了“mq”扩展程序,则可以删除更改集:

 hg strip REV

从存储库中删除修订版REV及其后续内容。

如果您不确定效果或是否真的想要这个,那么您应该只在克隆中执行此操作

MQ

另一种方法是弹出您不想进入队列的变更集。我不知道这是否适用于整个分支,我也不知道确切的命令。

克隆

基本上你克隆了你想要保留的东西

hg clone --branch default original newclone

这将从original克隆到newclone,并且只克隆默认分支。如果要克隆多于默认分支,可以为要克隆的每个分支重复--branch NAME选项。

同样,请确保您尝试使用新克隆,并在将任何内容推送到中央存储库之前验证您是否得到了所需内容。

答案 2 :(得分:1)

您可以使用--close-branch开关提交以关闭分支,以便在执行hg分支时不显示。无论如何,你必须推动--new-branch,因为你刚刚创建了一个。