有没有“他们的”版本的“混帐合并

当使用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?