最近,我的一位同事移植了一个提交,该提交更改了 .hgsubstate 上的一个(三个中的一个)子存储库。移植改为更改所有三个以匹配原始变更集(即使它们是从前一个更改的):
changeset main:
f60c22f43d335e95a95301aee58a092b63800e4b external/a
26e615cf033cffa9fba77d2369e3802cc2b9a95e external/b
ca46ca7e5243439de09a2d14ffa60432c6c56d74 external/c
diff of changeset grafted:
7fe8fcdd7648e14bee5889a4b3155fde49f09de4 external/a
5b90cf021b0006c8681247a73e9940f835a959f4 external/b
-8479ff0a18dc684db7f0771ace700915c51e92e6 external/c
+69e97bdab56155fee6ab4d0d21bbf36b34b040f8 external/c
final graft:
7fe8fcdd7648e14bee5889a4b3155fde49f09de4 external/a
5b90cf021b0006c8681247a73e9940f835a959f4 external/b
69e97bdab56155fee6ab4d0d21bbf36b34b040f8 external/c
似乎嫁接正在取代文件批发,而不仅仅是它的具体变化。这与我对嫁接应该做什么的直觉背道而驰。更糟糕的是,即使我使用 -t internal:fail 它也会这样做,它不会让我合并任何东西。
我至少想知道为什么会发生这种不幸的合并,这样我们将来就可以避免它。我试图在一个玩具示例上重现该问题,但我失败了;由于大约有 350 次提交/合并将两个变更集分开,我很可能错过了有问题的部分。
我的问题是:我可以让反复无常的输出来做这个移植所采取的步骤吗?或者以某种方式确定有问题的合并的来源?