当使用git merge
将主题分支 “B” 合并到 “A” 时,我会遇到一些冲突。我知道使用 “B” 中的版本可以解决所有冲突。
我知道git merge -s ours
。但我想要的是像git merge -s theirs
这样的东西。
它为什么不存在?在与现有git
命令冲突合并后,如何获得相同的结果? ( git checkout
B 中每个未合并的文件)
更新:从分支 A(合并提交点到树的 B 版本)丢弃任何东西的 “解决方案” 不是我想要的。
将-X
选项添加到theirs
选项中。例如:
git checkout branchA
git merge -X theirs branchB
一切都会以理想的方式融合。
我见过的唯一问题是文件是否从 branchB 中删除。如果 git 之外的其他东西都被删除,它们就会显示为冲突。
修复很容易。只需运行git rm
,其中包含已删除的任何文件的名称:
git rm {DELETED-FILE-NAME}
在那之后, -X theirs
应该按预期工作。
当然,使用git rm
命令进行实际删除可以防止冲突首先发生。
注意 :还存在更长的表单选项。要使用它,请替换:
-X theirs
有:
--strategy-option=theirs
一种可行且经过测试的解决方案,用于将 branchB 合并到我们的签出分支 A 中:
# in case branchA is not our current branch
git checkout branchA
# make merge commit but without conflicts!!
# the contents of 'ours' will be discarded later
git merge -s ours branchB
# make temporary branch to merged commit
git branch branchTEMP
# get contents of working tree and index to the one of branchB
git reset --hard branchB
# reset to our merged commit but
# keep contents of working tree and index
git reset --soft branchTEMP
# change the contents of the merged commit
# with the contents of branchB
git commit --amend
# get rid off our temporary branch
git branch -D branchTEMP
# verify that the merge commit contains only contents of branchB
git diff HEAD branchB
要自动化它,您可以使用 branchA 和 branchB 作为参数将其包装到脚本中。
此解决方案保留了合并提交的第一个和第二个父级,就像您期望的git merge -s theirs branchB
。
较旧版本的 git 允许您使用 “他们的” 合并策略:
git pull --strategy=theirs remote_branch
但是这已被删除,正如Junio Hamano (Git 维护者)在此消息中所解释的那样。如链接中所述,您可以这样做:
git fetch origin
git reset --hard origin
但要注意,这与实际合并不同。您的解决方案可能是您真正想要的选择。