Git合并/挑选问题

4
我正在使用git来管理一个大型遗留项目,该项目有两个分支 - v1.0和v2.0。每个分支的源代码在某些地方非常不同,在其他地方则相同。当我对v1.0分支进行错误修复时,我必须使用git cherry-pick将其添加到v2.0分支中,因为git merge 1.0会破坏v2.0源代码的大部分内容。
然而,v1.0上的新开发已停止,使用git cherry-pick将修复内容复制到v2.0分支很麻烦。我希望能够告诉git,在从1.0合并到2.0时只从1.0提交历史记录的特定点开始合并(即新开发停止时)。这种做法是否可行?它将允许我对v1.0源代码进行多次修复,并在一次合并中将更改合并到v2.0,而不是使用多个cherry-picks。

但是如果2.0的代码更新,那么1.0的代码就不会破坏更新的代码,对吧? - citizen conn
问题在于两个分支同时进行了积极的开发,在某些领域,代码非常不同。这是在我们转移到git之前的事情。 - Rob
1个回答

3

从2.0分支执行

git merge --strategy=ours v1.0

我自己没有测试过,所以请先在不重要的东西上试试,但从文档中看来,它正是你需要的。

来自文档:

这将解决任意数量的头部,但合并的结果树始终是当前分支头部的树,实际上忽略了所有其他分支的更改。它旨在用于取代旧的侧分支开发历史记录。请注意,这与递归合并策略的-Xours选项不同。


我很好奇这是为什么?根据我的理解,这个命令在管道命令方面所做的就是在当前分支中创建一个新的提交,其中包含一个额外的父提交和相同的树。顺便说一句,如果这个命令真的有问题,手动执行这样的命令将是另一种解决方案。虽然有点麻烦。 - Ivan Danilov
你的方法可能是可行的,只是我记得现在有更好的方法。我刚刚花了十分钟找清单,但没找到。 - citizen conn
好的,如果你最终找到了 - 如果你能发给我一个链接,我会非常感激 :) - Ivan Danilov
哦,根据http://www.kernel.org/pub/software/scm/git/docs/git-merge.html,只有`merge -s recursive -X theirsmerge -s theirs`应该是一个错误... - Ivan Danilov
为了完整起见。你所提到的Junio Hamano发布的帖子在这里,http://marc.info/?l=git&m=121637513604413&w=2,是吗? - Ivan Danilov
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接