命名先前未命名的分支

Jab*_*Jab 5 mercurial

似乎命名一个以前未命名的分支实际上是行不通的。它创建了一个令人讨厌的多头问题,我找不到解决方案。

这是工作流程...

UserA开始使用他们期望很小的功能,因此他们只是开始使用(default分支机构)。事实证明,这项更改是一个大项目,需要多个贡献者。因此,UserA出现了问题hg branch "Feature1"并继续工作,需要在本地提交。

然后,用户A从中央存储库中提取更改,以便他可以推送。

此时,为什么还要hg heads返回3个头?它显示2代表default和1代表Feature1。第一个标题default是分支上另一个用户的最新更改(无关)。第二default个头是提交之前的hg branch "Feature1"提交。

中央存储库有规则的执行,让每个分支只有1头被允许,所以迫使一推是不是一种选择。回购协议不需要default分支上有多个头。

UserA应该能够推送这些更改,以便其他用户可以看到Feature1分支并提供帮助。我似乎找不到“纠正”此问题的方法。我认为在它是命名分支之前,我无法为该功能重新编写初始提交的分支。

我知道命名分支之前的初始更改在技术上是默认分支,但这是否意味着Feature1在合并该分支之前它们将是正面的?

Jab*_*Jab 3

我找到了一个解决方案,无需重新克隆和合并更改。我更喜欢这种方法,主要用于历史目的,因为我认为它是有关该功能所发生情况的有价值的信息(又名它开始很小,然后被重新认为更大) ETC..)

在我的示例中,UserA 应该更新到不需要的分支default并关闭默认分支,因为它是不需要的。这将留下 2 个头,一个为预期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"
Run Code Online (Sandbox Code Playgroud)

然后更新到Feature1分支,推送并继续工作。

另一个工作流程几乎是相同的,只是用户 A 决定推动Feature1其他人提供帮助并且default没有被其他任何人推动。本地存储库只有 2 个头,用户可以推送,但 UserA 不想只推送,因为 的提示default现在将是真正“属于”的变更集Feature1

UserA 应该更新到 t 的最新的、不需要的变更集defaul。然后将其恢复default到 UserA 开始工作之前的修订版本。

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"
Run Code Online (Sandbox Code Playgroud)

然后更新到Feature1分支,推送并继续工作。