假设我有一个善变的项目,我这样做:
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
删除我不明白该怎么做,因为我总是最终在我的回购中使用功能分支。
答案 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及其后续内容。
如果您不确定效果或是否真的想要这个,那么您应该只在克隆中执行此操作
另一种方法是弹出您不想进入队列的变更集。我不知道这是否适用于整个分支,我也不知道确切的命令。
基本上你克隆了你想要保留的东西
hg clone --branch default original newclone
这将从original
克隆到newclone
,并且只克隆默认分支。如果要克隆多于默认分支,可以为要克隆的每个分支重复--branch NAME
选项。
同样,请确保您尝试使用新克隆,并在将任何内容推送到中央存储库之前验证您是否得到了所需内容。
答案 2 :(得分:1)
您可以使用--close-branch开关提交以关闭分支,以便在执行hg分支时不显示。无论如何,你必须推动--new-branch,因为你刚刚创建了一个。