删除 Mercurial 中的分支但保留更改?

Remove branches in Mercurial but keep changes?

我刚刚发现我们不应该在本地 Mercurial 存储库中创建命名分支,因为它们会被带走并推送到上游存储库,在那里它们永远存在。

不幸的是,我的本地仓库中已经有多个功能分支,我已经准备好将它们合并到 default 并推送到主仓库。所以,我需要做的是(以某种方式)将工作保留在这些分支中,但删除命名的分支。

有没有办法做到这一点,缺少大量可怕的手册revert/cut/paste?

使用 TortoiseHg:

(确保在文件 -> 设置 -> 扩展中启用变基扩展)

  1. 更新到指定分支的第一个更改集的父级。
  2. 右键单击 nambed 分支的第一个更改集,然后单击 rebase。
  3. 确保 "Keep orignal branch names (--keepbranches)" 检查。
  4. 确保"Rebase entire source branch (-b/--base)"选中。
  5. 点击变基。

另一种方法是使用 hg convert 命令(标准扩展)和 the branchmap option.

对于私有存储库或至少一个具有尚未发布的变更集的存储库,这可以正常工作,即使像变基一样它会修改历史记录。

与使用 rebase 相比的一个优点是它可以用于同时处理多个分支(命名或未命名)。如果有很多东西要移动,那可能会更快/更容易。

第二个优点是,由于 convert 将创建一个新的存储库,因此如果某些内容无法按预期工作,则不会对原始存储库造成风险。 (当然,在使用 rebase 时,您可以先进行备份,我认为这是一个合理的预防措施。)