有没有“他们的”版本的“混帐合并
当使用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
将分支机构B合并到我们的检出分支机构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
但要小心,这与实际的合并不同。 您的解决方案可能是您真正需要的选项。
链接地址: http://www.djcxy.com/p/7181.html上一篇: Is there a "theirs" version of "git merge
下一篇: How do I migrate an SVN repository with history to a new Git repository?