git merge递归他们的,它是如何工作的?

时间:2010-02-15 18:44:40

标签: git merge

我遇到了一些问题。我们有自己的CMS,它使用git进行协作和版本控制。

现在我有两个git存储库A和B,A是项目,B是CMS本身。现在我想让B进入A,但是当我这样做时,我得到了很多合并冲突,冲突的解决方案总是使用来自B的东西。

现在我认为我需要的是

git merge <branch> -s recursive theirs <commit>

因为我想合并,当存在合并冲突时,应该强制使用B中的解决方案。但是我无法让它工作。它一直在告诉我fatal: 'theirs' does not point to a commit

recursive theirs我找到了here

有谁知道我做错了什么?

2 个答案:

答案 0 :(得分:58)

您必须使用此表单来传递合并策略选项:

git merge -s recursive -Xtheirs # short options
git merge --strategy recursive --strategy-option theirs # long options

另外请确保您的版本支持-Xtheirs,这是最新功能(?)

答案 1 :(得分:2)

我认为它失败的原因是你指定“递归他们的”作为策略。 “递归”是一种策略,当你在它后面放一个空格时,“他们的”被解释为git需要合并你的工作副本(例如另一个分支或refspec)。

我认为您无法完全按照自己的意愿指定策略。有一种叫做“我们的”的策略与你想要的相反。

在这种情况下使用的通常模式是合并或重新绑定到“B”存储库。从“A”存储库的工作副本中,如果可能的话,你会做一个rebase(如果你已经与其他开发人员共享git repo,那么可能是不可能的)。 rebase基本上将A存储库回滚到两个存储库中的公共提交,应用“B”提交,然后“A”提交在顶部。您将解决沿途的任何合并冲突。

一旦你通过合并或重新定位到“B”存储库的痛苦,未来的合并将不那么痛苦。