当使用git merge将主题分支“B”合并为“A”时,我得到了一些冲突。我知道所有的冲突都可以用B的版本解决。
我知道git合并是我们的。但我想要的是类似git merge -s的东西。
为什么它不存在?如何在与现有git命令冲突合并后实现相同的结果?(git从B中检出所有未合并的文件)
仅仅丢弃分支A中的任何东西(合并提交点到树的B版本)的“解决方案”不是我想要的。
当使用git merge将主题分支“B”合并为“A”时,我得到了一些冲突。我知道所有的冲突都可以用B的版本解决。
我知道git合并是我们的。但我想要的是类似git merge -s的东西。
为什么它不存在?如何在与现有git命令冲突合并后实现相同的结果?(git从B中检出所有未合并的文件)
仅仅丢弃分支A中的任何东西(合并提交点到树的B版本)的“解决方案”不是我想要的。
当前回答
要真正正确地进行合并,只从合并的分支获取输入,你可以这样做
Git merge——strategy=我们的ref-to-be-merge
Git diff——binary ref-to-be-merged | Git apply——reverse——index
Git提交—修改
在我所知道的任何场景中都不会有冲突,您不必创建额外的分支,它就像正常的合并提交一样。
然而,这在子模块中并不适用。
其他回答
一个简单而直观的(在我看来)两步方法是
git checkout branchB .
git commit -m "Picked up the content from branchB"
紧随其后的是
git merge -s ours branchB
(将两个分支标记为合并)
唯一的缺点是它不能从当前分支中删除branchB中已删除的文件。然后,两个分支之间的简单区别将显示是否存在这样的文件。
这种方法还可以从之后的修订日志中清楚地看出所做的工作以及意图。
这将合并现有的baseBranch中的newBranch
git checkout <baseBranch> // this will checkout baseBranch
git merge -s ours <newBranch> // this will simple merge newBranch in baseBranch
git rm -rf . // this will remove all non references files from baseBranch (deleted in newBranch)
git checkout newBranch -- . //this will replace all conflicted files in baseBranch
从现在起,我一直使用Paul Pladijs的答案。我发现,你可以做一个“正常的”合并,发生冲突,所以你这样做
git checkout --theirs <file>
通过使用来自其他分支的修订来解决冲突。如果对每个文件执行此操作,则会得到与预期相同的行为
git merge <branch> -s theirs
无论如何,这种努力比合并策略要多!(这是用git 1.8.0版本测试的)
我最近需要为两个共享共同历史的独立存储库执行此操作。我从:
Org/repository1主 Org/repository2主
我希望将repository2 master的所有更改应用到repository1 master,接受repository2所做的所有更改。在git的术语中,这应该是一个称为-s their的策略,但它不存在。要小心,因为-X their的名字就像你想要的那样,但它不是一样的(它甚至在手册页中这样说)。
我解决这个问题的方法是到repository2并创建一个新的分支repo1-merge。在那个分支中,我运行git拉git@gitlab.com:Org/repository1 -s ours,它合并得很好,没有问题。然后我把它推到遥控器上。
然后回到repository1并创建一个新的分支rep2 -merge。在该分支中,我运行git拉git@gitlab.com:Org/repository2 repo1-merge,它将与问题一起完成。
最后,您可能需要在repository1中发出合并请求,使其成为新的主节点,或者只是将其作为一个分支。
如果你在分支A上,请:
git merge -s recursive -X theirs B
在git版本1.7.8上测试