mercurial - 命名以前未命名的分支

标签 mercurial

似乎命名以前未命名的分支并没有真正起作用。它产生了一个令人讨厌的多头问题,我找不到解决方案。

这是工作流程...

用户 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/

相关文章:

Mercurial 和忽略模式

Mercurial 进程内钩子(Hook),GPLv2+ "derived work"与否?

mercurial - 关闭头部而不进行任何更改

mercurial - 是否可以从 Mercurial (HG) 存储库中 checkout 单个目录?

mercurial - 如何通过 mercurial 修复先前版本中的错误?

version-control - 在 Mercurial 中设置文件的可执行位

mercurial - Push 创建新的远程头! (是不是忘记 merge 了?用push -f强制)

windows - 安装 Mercurial Activity 扩展的问题

使用 hg/mercurial 克隆存储库时出现 python 错误

mercurial - 如何在 Mercurial 上进行 "rollback"上次提交?