我们的项目中有一段非常奇怪的 git 历史。首先,有另一个项目可能有以下历史:
回购1:
a---b---c
然后是我们的项目
回购2:
u---v---w
因为我们在 repo2 的代码中需要 repo1,所以“聪明”的程序员使用 read-tree 将 repo1 的最后一次提交 (c) 读入 w,所以现在我们有了
u---v---w---w'
其中 w' 有提交 c 而没有它的历史。然后对两个存储库进行了一些更改,导致以下历史记录:
a---b---c---d---e
u---v---w---w'---x---y
现在我们要清理混乱并将 repo1 的更改合并到我们的存储库中。然而,当简单地合并两个存储库时,我们会获得大量的冲突,因为分支不共享历史记录(实际上它们共享,但 git 不知道),因此 git 无法执行三向合并。
那么我们如何进行三路合并呢?有没有办法“添加”丢失的历史边缘,即创建这样的东西:
a---b---c---d---e
\
u---v---w--w'---x---y