hg:修复没有合并的分支

时间:2014-10-06 14:35:44

标签: mercurial branch

我的存储库包含错误的分支。分支用作提交消息的标签,显示项目的相关部分(例如数据,类似搜索的功能)。没有使用合并。每次下一次提交,如果是关于除prev之外的其他功能,只需重新打开具有所需名称的分支。

看起来像是

o changeset:   717
| branch:      default
|
o changeset:   523
| branch:      search
|
o changeset:   357
| branch:      data
|
o changeset:   397
| branch:      data
|
o changeset:   789
| branch:      default

什么是正确的方法来阻止这种丑陋?

更新到每个分支头并因此与最后一次提交合并?但实际上并没有任何合并。 或者更新到每个头,提交"关闭分支",更新到下一个头...并且最后更新到默认值?

2 个答案:

答案 0 :(得分:0)

从历史的角度来看(只有一行),人们真的只给每个提交一个不同的分支名称,而实际上并没有同时在两个不同的分支上做任何工作。

虽然之前我还没有看过,但这是一种有趣而简洁的方法,可以将变更集排序到功能中,而不会创建丑陋的历史记录。

至于“停止”这个,只需停止重新开启分支。由于实际上没有任何头需要合并,所以你无需做任何“清理”历史记录。因此,如果您查看default并说出hg merge search,Mercurial会告诉您“无需合并”。

答案 1 :(得分:0)

首先,正如Aaron所指出的那样,并且假设这些是委员会的误解,你需要教会其他人在适当的时候(通过适当的定义)来创建命名分支,当它不是&#时39;吨。我想这可以解决你的大部分问题。

如果要将所有内容重新排列,并且分支当前处于打开状态,则可以关闭每个分支,然后将它们合并为默认值。如果你在结束后不合并,你就会有一个晃来晃去的'在您的历史记录图表中提交,但这对您来说可能或不重要。此外,如果您只有1'活跃'分支,您可以查看

  

hg branches

然后所有提交当前都合并到该活动分支中,您可能只需要将该分支合并为默认值以使事物符合要求。但是,您可能仍然希望关闭不活动的分支,如果您在关闭后没有合并它们,将会留下悬空提交。

如果你想避免使用branchnames进行提交,可以使用bookmarks来查看,这类似于分支和标记的合并。

如果您想最小化回购中的分支(甚至是匿名分支),可以使用rebase,这是您必须启用的内置扩展。您可以在拉动其他人的更改时使用rebase开关,在您提交的提交后自动移动提交并使历史呈线性。一旦你的提交已被拉到或推到其他地方,你就不能这样做(好吧,你could,但是这会使事情变得非常复杂,这取决于你提交的提交会发生什么)。但是,使用rebase将取决于您对保持准确历史的感觉。

清理现有的回购可能是一项任务。您可以使用rebase将所有提交移动到公共分支,例如默认,但是由于它会更改您的历史记录,因此它将不再兼容'与该回购的现有克隆。所以你必须使用rebase来改变你的历史,然后让每个人(包括服务器)重新放回修改过的repo并删除旧的repo(他们甚至无法将旧的提交从旧的提交到改变的repo)。