似乎命名以前未命名的分支并没有真正起作用。它产生了一个令人讨厌的多头问题,我找不到解决方案。
这是工作流程...
用户 A 开始处理他们希望很小的功能,所以他们才开始工作(在 default
分支之外)。事实证明,更改是一个大型项目,需要多个贡献者。所以用户 A 问题... hg branch "Feature1"
并继续工作,在本地提交所需的内容。
然后,用户 A 从中央存储库中拉下更改,以便他可以推送。
此时,为什么hg heads
返回 3 头?它为 default
显示 2和 1 表示 Feature1
.第一头为default
是分支上另一个用户的最新更改(无关)。第二个default
head 是 hg branch "Feature1"
之前的提交犯罪。
中央存储库强制执行规则,因此每个分支只允许 1 个头 ,因此强制推送不是一种选择。 repo 不希望在 default
上有多个头分支。
UserA 应该能够推送这些更改,以便其他用户可以看到 Feature1
分支并提供帮助。我似乎无法找到一种方法来“纠正”这一点。我不认为我可以重写该功能的初始提交的分支,之前它是一个命名分支。
我知道命名分支之前的初始更改在技术上是在默认分支上,但这是否意味着它们将在 Feature1
之前一直处于领先地位。分支 merge 了?
最佳答案
我找到了一个无需重新克隆和 merge 更改的解决方案。我更喜欢这种方法,主要是出于历史目的,因为我认为这是关于该功能发生了什么的有值(value)的信息(也就是它开始时很小,然后被重新认为是更大的等等..)
在我的示例中,UserA 应该更新到 default
上不需要的头部。并关闭该默认分支,因为它是不需要的。这将为 default
留下 2 个头一个一个用于 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"
然后更新到
Feature1
分支,插入并继续工作。另一个工作流程几乎相同,除了 UserA 决定推送
Feature1
为他人提供帮助和default
没有被其他人插入。本地 repo 只有 2 个头,用户可以推送,但用户 A 不想只推送作为 default
的提示现在将是真正“属于”Feature1
的变更集.用户 A 应该更新到最新的、不需要的变更集
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"
然后更新到
Feature1
分支,插入并继续工作。
关于mercurial - 命名以前未命名的分支,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2969769/