version-control - 如何用多个后代头来压制反复无常的修订

标签 version-control mercurial

在推送到我们的主存储库之前,我正在尝试清理一些本地(草稿)mercurial 历史记录。我想要采取的一个步骤是将“Fixup”变更集压缩/滚动到其父级中。我的历史记录如下:

o  [draft] 14 X
|
| o  [draft] 13 Y
|/
o  [draft] 12 Fixup
|
o  [draft] 11 Thing to Fix
|
o  [draft] 10 Z
|
~

完成后,它应该看起来像这样:

o  [draft] 13 X
|
| o  [draft] 12 Y
|/
o  [draft] 11 Thing to Fix with Fixup
|
o  [draft] 10 Z
|
~

显然,将两个提交滚动在一起不会产生任何冲突,因为后代的代码未受影响。但是,我找不到一种方法让 histedit 允许我编辑那么早的历史记录,因为它需要编辑“变更集及其所有后代。”

这个编辑可以吗?应该怎么做?

最佳答案

这当然有可能。不过,我不知道如何轻松地做到这一点。

诀窍是改变这个:

o  [draft] 14 X
|
| o  [draft] 13 Y
|/
o  [draft] 12 Fixup
|
o  [draft] 11 Thing to Fix
|
o  [draft] 10 Z
|
~

进入:

o   [draft] 16 Fixup
|
o   [draft] 15 Thing to Fix
|
| o  [draft] 14 X
| |
| | o  [draft] 13 Y
| |/
| o  [draft] 12 Fixup
| |
| o  [draft] 11 Thing to Fix
|/
o  [draft] 10 Z
|
~

其中 15 是 11 的副本,16 是 12 的副本。(使用 hgraft 来执行此操作。)您现在可以使用 hg histedit 来组合这些两个。

现在可以轻松地将 13 和 14 复制到已取代旧 15 和 16 的新 15 之上:

o  [draft] 17 X
|
| o   [draft] 16 Y
|/
o   [draft] 15 Thing to Fix with Fixup
|
| o  [draft] 14 X
| |
| | o  [draft] 13 Y
| |/
| o  [draft] 12 Fixup
| |
| o  [draft] 11 Thing to Fix
|/
o  [draft] 10 Z
|
~

现在您可以 hg strip -r 11 删除 11、12、13 和 14,只留下更正的提交。 (请注意,您可以使用 rebase 来简化这一点。长格式主要是为了说明和易于理解。)

关于version-control - 如何用多个后代头来压制反复无常的修订,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55344982/

相关文章:

mercurial - Mercurial:如何仅查看 merge 带来的更改?

database - 寻找数据库版本控制系统

version-control - 并行开发分支、构建工件存储库和 QA 版本

version-control - 是否有允许您永久删除文件的版本控制系统?

mercurial - 用模板截掉hg日志输出中N个字符处的 "desc"

Mercurial 在另一个分支中移动提交

git - 从 TFS 迁移到 GIT,共享项目到 nuget

svn - 如何将集市分支导出到新的颠覆存储库,然后从中拉/推

version-control - 将推送的命名分支与默认分支 merge 会导致错误

mercurial - 如何在两个 hg 存储库之间同步由 .hgignore 匹配的文件