我想知道我该怎么做才能强制将一个dev分支合并到我的master分支中?使用“ git merge dev”会导致很多冲突。但是,我不想单独处理它们。相反,我只是想使用我的dev分支中的所有文件并将其合并到master中。但是这种“强制合并”并不像我想的那么容易。有人可以指出我正确的方向吗?
答案 0 :(得分:6)
我只是想使用我的dev分支中的所有文件
如果您是说要使用 all 分支中的文件-即master
分支上所做的所有更改(由于分支不同而应撤消)-那么有几个的方式。
合并-s我们的
您可以
git checkout dev
git merge -s ours master
git checkout master
git merge dev
这有点绕圈,因为没有“他们的”策略。 (默认的合并策略有一个“其”策略 option ,但是只要与{{1}的更改不冲突,它仍会尝试应用master
的更改。 }};如果您想只是保留dev
版本,那将无法正常工作。)因此,您可以使用dev
策略在{之间创建合并提交{1}}和ours
以及所有文件的master
版本,然后将dev
快速转发到该合并。
这意味着在合并提交时,父级的顺序将被颠倒,这通常是您不会注意到的,但是在某些情况下(例如,如果您在日志上使用dev
或其他内容)可能会很重要。
提交树
如果父母的顺序很重要,则可以使用管道命令master
--first-parent
历史记录重写
上述方法的潜在缺点是它们会产生可能不直观的合并提交,因为其结果会忽略合并一侧的更改(而合并预计会合并两种更改)两侧)。由于您的合并在正常策略下会发生冲突,因此它并没有什么大问题,但是仍然有人将其归类为“恶意合并”。如果要避免这种情况,另一种选择是重写历史记录。
这也不利,特别是如果您使用此存储库与其他开发人员进行协作时。您可以在commit-tree
文档的“从上游资源恢复中”下阅读有关该问题的信息(以及通常的解决方法)。 (虽然文档将这个问题称为“上游变基”,但实际上它适用于共享分支的任何历史记录重写。)
如果您认为重写历史记录是有意义的,那么最简单的事情就是移动git checkout master
git merge $(git commit-tree dev -p master -p dev -m "merging dev over master")
分支,使其指向与git rebase
相同的提交。
master