Mercurial合并/删除一个功能分支。

3
我正在尝试使用Mercurial中的分支-每个特性方法,但是在创建了一个工作分支并将其合并回默认分支后,我无法将更改推送回主存储库。应该怎么做呢?
我创建了一个名为“Gauge customisation”的分支,在该分支中进行了一些工作,然后将其合并回默认分支。继续在默认分支上进行了一些更改,现在我想将其提交回我的主存储库。但是当我尝试时,我会得到以下错误信息:
“abort: push creates new remote branches: Gauge customisation! hint: use 'hg push --new-branch' to create new remote branches”
我认为分支不会显示在主存储库中,并且通过在本地合并,我可以在分支(或潜在的分支)中工作,然后在测试完毕后将其推送到主存储库。
Gauge customisation分支是否仍应显示?我真的认为此时只能看到默认值吗?但是这是我没有正确理解工具吗?我应该创建远程分支吗?
理想情况下,我希望能够为每个功能打开一个分支,并且在任何时候都有3或4个这样的分支运行(这是我们公司的工作方式),因此我希望现在能够牢固掌握事情。
2个回答

5
从技术上讲,您可以使用--new-branch将新分支提交到主存储库中。如您的屏幕截图所示,从拓扑视图而言,并没有真正具有头部的新分支,但是从命名空间视图而言,即当hg中止您的推送时,它只是想要您明确承认向远程存储库添加一个新的分支(名称)。
然而,对于像您这样的任务 - 临时特性分支 - 更常见的工作流程是不使用命名分支,而是使用匿名/书签分支或单独的克隆。命名分支通常用于长期存在的分支,例如stablelegacy等。如果您创建了一个匿名/书签分支,并在其功能完成后将其合并回去,hg在推送时就不会抱怨了。
在这方面,经常推荐阅读的一篇文章是A Guide to Branching in Mercurial

我的担忧是我不想用我本地创建的任何分支污染主仓库,而且我听说使用“每个功能一个分支”的方法来隔离可能需要单独集成的离散工作单元是一种“好的做法”。如何实现这一点,我完全可以接受各种想法。我接受你所说的__临时功能分支__(这正是我在这里的目标)和__长期存在的分支__之间的区别。下一步我需要阅读的是《分支指南》。非常感谢。 - Simon Martin
1
在你的例子中,书签临时特性分支方法可以像这样使用:1)将rev 44作为main(或master等)进行书签标记,2)将rev 44作为gauge进行书签标记,3)进行规格更改并提交,4)更新到main,5)将gauge合并到main。但是,个人而言,我更喜欢只在必要时工作、提交、书签和分支。在你的例子中,由于主线和特性工作是顺序进行的,因此根本没有分支。阅读链接的博客文章后,您应该选择自己喜欢的方式。 - Oben Sonne
1
这正是正确的答案 - 除非你想将它们永久记录在历史中,否则不要使用每个功能命名的分支。在阅读“Mercurial分支指南”后,请阅读此链接:http://mercurial.selenic.com/wiki/StandardBranching。 - Ry4an Brase

4
合并两个分支不会让它们消失。您需要手动关闭功能分支,方法是切换到该分支并执行以下操作:
hg commit --close-branch -m 'Closing branch'

我尝试运行该命令,工作台更新后显示了一个水平条而不是正常的圆形图标(用于分支),但我仍然无法提交到我的主存储库。返回的消息如上所述:push创建新的远程分支... - Simon Martin
那么我接下来要问以下问题(因为在你的问题中没有明确说明):你之前是否将功能分支推送到外部存储库?如果没有,那么远程存储库将认为你的 hg push 是创建新分支的正常操作。你应该按照建议添加 --new branch 参数,将(现在可能已关闭的)分支推送到远程存储库。 - Xion
不,我没有尝试将功能分支推送到主存储库。我的意图是创建一个空间来尝试使用分支-per-feature 的概念[链接]http://mercurial.selenic.com/wiki/Workflows#Feature_separation_through_named_branches[/链接],并将开发工作的那一部分与默认分支隔离开来,以便在确定它是浪费时间时可以放弃它,或者在确定它完成后将其合并回默认分支。更进一步,我想能够独立地同时处理多个功能分支。 - Simon Martin
2
只需使用 --new-branch 将已关闭的分支推送到服务器即可。分支名称将让您稍后查看更改集来自何处。 - Martin Geisler

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接