假设我有一个存储库'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 (Main)
| | |
A--B--C--D--E--f--g (Max)
你会怎么做? 提前谢谢。
答案 0 :(得分:0)
这取决于您想要投入多少精力。虽然我不知道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
完整的历史记录返回工作存储库中的Max