假设我分叉某人的git repo并提交A,B,C和D.我分叉的那个人选择A和C,因此成为A'和C'。他还提出了自己的X,Y和Z.所以在这之后,我的分支有A B C D,并且他有A'C'X Y Z.假设两个分支都已发布,因此rebase不是一个有吸引力的选择。还假设X Y Z与A B C D中的任何一个都不冲突。如何以有用的方式合并这两个分支?我应该简单地合并,然后手动解决所有问题?在合并头的日志中,我可以做些什么来重复提交消息吗?从现在开始,这两个分支注定只能通过挑选彼此的提交进行同步吗?
答案 0 :(得分:3)
直接合并应该有效。 Git应该注意到相同的更改集,并且不会尝试合并A / A'或C / C'。如果X,Y或Z触及A'/ C'改变的相同代码,则可能必须解决那里的冲突,特别是如果B或D触及相同的代码。
您可以随时git merge --no-commit
并检查结果,看看它是否符合您的预期。
答案 1 :(得分:1)
如果没有冲突,直接合并是显而易见的。如果有冲突......
你可以先合并他的C',这个阶段的任何冲突都来自重新应用你自己的更改,如果它们是非平凡的,或者因为它们的应用有点乱序。如果你的C在B上积累并且他的C'不是一个干净的副本,或者如果任何B C D在A上建立,那么可能会发生这样的情况,所以重新应用他的A'不再是明显的无操作等等。
您可以跳过详细的冲突调查,只需手动或接受您的版本:
git merge --strategy=ours C'
然后合并其余部分,更加关注那里的冲突。如果他的X Y Z确实不接触A B C D的东西,这应该没有冲突。如果他在将C'合并为C'时做了一些奇怪或错误的事情,并且在合并C'时将其丢弃,那么它可能会在此处或将来的任何时间回来咬你。