我有(或打算拥有!)这样的回购:
Master *-----*--*----------C---
\ \
Project1 \-*-------A----B----M2---A'--B'---
\ \ \
Project2 \----------*---M1------------M2---
我想做合并M2但我希望完全忽略A和B。然后,我将手动(例如挑选)重新创建A'和B'作为/如果有必要在来自 master 的新更改之上。
Project2 基于 Master,但合并了 Project1 的更改。
期望的结果:
我希望点M2在文件方面是C的相同副本。
我需要 Project1 有自己的线性历史,以便 Project2 可以从中合并。
上下文:Master 是 Drupal 的主要代码库。Project1 是我用来维护我希望与多个项目共享的特定补丁的分支。Project2(和许多其他)从 Project1 合并。
我考虑过:
git merge -s recursive -X theirs master
theirs
问题在于 AFAIK 只有在发生冲突时才会喜欢它。因此,如果 A 中的更改不冲突,它将出现在M2处,这意味着 A' 将不完整。git revert B..A ; git merge C
这会起作用,但会给我留下一个混乱而漫长的历史。有
git merge -s ours
但似乎没有git merge -s theirs
。我不想这样做,
git reset --hard C
因为这(我认为)会破坏将 Project1 合并到 Project2 的可能性。另一种方法是将 Project1 重新定位到 C 上,但同样,这意味着我无法合并到 Project2 中。