git合并递归theirs,它是如何工作的?

40

我遇到了一些问题。我们有自己的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
有人知道我做错了什么吗?

可能是如何为Git rebase选择合并策略?的重复问题。 - Louis
2个回答

78

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

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

还要确保您使用的版本支持-Xtheirs,这是一个相当新的功能(?)


它确实是错误的git版本,现在使用新版本它可以工作了..只是它的表现并不像我想象中的那么好,我获取了所有合并冲突但它们中没有一个包含任何冲突:s - Daan Poron
8
这个答案似乎忽略了在合并中包含分支的步骤?git merge -s recursive -Xtheirs <branch> - robstarbuck

3
我认为它失败的原因是您指定了“递归theirs”作为策略。“递归”是一种策略,当您在其后加上一个空格时,“theirs”被解释为git需要将您的工作副本与之合并的内容(例如另一个分支或refspec)。
我认为您将无法精确指定所需的策略。有一种称为“ours”的策略,它与您想要的相反。
在这种情况下通常使用的模式是合并或将“B”存储库变基。从“A”存储库的工作副本中,如果可能的话(如果您已经与其他开发人员共享git repo,则可能不可能),您将进行变基。变基将基本上将A存储库回滚到两个存储库中的公共提交,应用“B”提交,然后在其上应用“A”提交。您将解决沿途的任何合并冲突。
一旦您经历了合并或将“B”存储库变基的痛苦,未来的合并将会更轻松。

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