Mercurial 命名的以前未命名的分支
给以前未命名的分支命名似乎不太合适。这造成了一个令人讨厌的多头问题,我找不到解决办法 这是工作流程 UserA开始使用他们期望的小功能,所以他们只是开始工作(离开Mercurial 命名的以前未命名的分支,mercurial,Mercurial,给以前未命名的分支命名似乎不太合适。这造成了一个令人讨厌的多头问题,我找不到解决办法 这是工作流程 UserA开始使用他们期望的小功能,所以他们只是开始工作(离开default分支)。这项变更原来是一个大型项目,需要多个贡献者。所以UserA问题hg分支“Feature1”并继续工作,提交所需的文件 然后,UserA从中央回购中提取变更,以便他可以推动 此时,为什么hg heads返回3heads?它为默认值显示2,为功能1显示1。default的第一个头是分支上另一个用户的最新更改(不相关)。
default
分支)。这项变更原来是一个大型项目,需要多个贡献者。所以UserA问题hg分支“Feature1”
并继续工作,提交所需的文件
然后,UserA从中央回购中提取变更,以便他可以推动
此时,为什么hg heads
返回3heads?它为默认值显示2,为功能1显示1。default
的第一个头是分支上另一个用户的最新更改(不相关)。第二个default
头是hg分支“Feature1”
commit之前的commit
中央存储库已强制执行规则,因此每个分支只允许1个头,因此强制推送不是一个选项。回购协议不希望在默认分支上有多个头
UserA应该能够推动这些更改,以便其他用户可以查看功能1
分支并提供帮助。我似乎找不到“纠正”这一点的方法。我认为我无法在该特性成为命名分支之前,重新编写其初始提交的分支
我知道命名分支之前的初始更改在技术上是默认分支上的,但这是否意味着在合并功能1
分支之前,它们将是头?您在本地回购中看到默认
分支上的两个头的原因是,在最新的共同祖先之后,中央回购中的变更集与本地回购中的变更集没有任何共同之处
要解决您的问题:
创建一个新的中央repo本地克隆(如果使用最新的公共祖先,可能会更容易)
从第一个本地回购导出更改。注意第一次本地更改后的冒号
,以获取该回购中的所有更改
cd local1
hg export -r first_local_change: > ../local1.patch
转到新的本地存储库,创建功能
分支以将更改导入,然后导入它们:
cd ../local2
hg branch feature
hg import ../local1.patch
hg import
有一个选项可以使用补丁文件中的分支信息,但默认情况下是禁用的
在这一点上,你可以继续使用新的本地回购在原来的地方。此外,我会再次检查,确保所有内容都与新回购协议中的内容一致。我找到了一个解决方案,无需重新克隆和合并中的更改。我更喜欢这种方法,主要是出于历史目的,因为我认为它是关于功能发生了什么的有价值的信息(也就是说,它开始很小,然后又被重新认为更大等等)
在我的示例中,UserA应该更新到default
上不需要的head,并关闭default的分支,因为它是不需要的。这将留下两个标题,一个用于default
,另一个用于Feature1
hg update -r X // X is the rev of the unwanted head.
hg commit --close-branch -m "Moved to Named Branch Feature1, cleaning up initial work"
然后更新到功能1
分支,按下并继续工作
另一个工作流几乎是相同的,除了用户A决定推送Feature1
给其他人帮助,并且default
没有被其他人向前移动。本地回购只有2个头,用户可以推,但是用户A不想仅仅按default
的提示,现在它将是真正“属于”到Feature1
的变更集
UserA应该更新到最新的、不需要的变更集defaul
t。然后将默认值
恢复到用户开始工作前的版本
hg update default
hg revert -r Y // Y is the changeset before UserA started working on the feature
hg commit -m "Reverting changes that now exist in Feature1 branch"
然后更新到Feature1
分支,按下并继续工作。来自hg-help-heads
:hg-heads
不带参数将显示分支头,根据定义,分支头是在同一分支上没有子级的变更集hg heads——在这种情况下,topo
应该提供您需要的结果。不要通过中央存储库。让您的开发人员互相取长补短。我们发现这是我们团队的一个非常大的问题(针对每个功能进行分支),并最终停止了hgweb.cgi脚本的工作(HTTP 414请求太长)。当我写下答案时,我从您的问题中了解到,您主要关心的是将default
分支上的本地存储库中的更改“移动”到功能
分支上。由于情况并非如此,因此合并两个default
头肯定是一个好办法。
hg update default
hg revert -r Y // Y is the changeset before UserA started working on the feature
hg commit -m "Reverting changes that now exist in Feature1 branch"