假设我有一个“Main”存储库,Max和co分别处理一个克隆。Max有一些尚未推送到“Main”的本地提交(“f”和“g”)。这就是它现在的样子(管道被推/拉):
A--B1--B2--C--D1--D2--D3--E (Main) | | | | A--B1--B2--C--D1--D2--D3--E--f--g (Max)
“B1”和“B2”以及“D1”、“D2”和“D3”是只有在一起才有意义的更改。我们希望将“B1”和“B2”组合到单个变更集“B”,并将“D1”、“D2”和“D3”组合到单个变更集“D”。新结构应如下所示:
A--B--C--D--E (Main) | | | A--B--C--D--E--f--g (Max)
我(主要)的问题是:推荐的做法是什么?
现在让我们让事情变得更糟: 我们有一个分支,它被合并到要折叠的更改集中。看起来是这样的:
A--B1--B2--C--D1--D2------D4--E (Main) | | \-------D3-/ | | | | A--B1--B2--C--D1--D2------D4--E--f--g (Max) \-------D3-/
新的历史应该如下所示:
A--B--C--D--E(主) | | | A--B--C--D--E--f--g(最大值)
你会怎么做? 提前谢谢。
这取决于你想为此付出多少努力。虽然我不知道Mercurial本身有什么解决方案(我只知道不能处理合并的历史编辑功能),但Git确实具有您需要的功能:
如果我愿意 真正地 我会做这样的手术
git fastexport --no-data --all > history.fi
history.fi
Max
A
hg-git
A.
hg push -r E Main
Main
hg push -r g Max
马克斯