作者:南和东 | 来源:互联网 | 2022-11-28 17:15
我想知道我应该怎么做才能从dev分支强制合并到我的master分支?使用“ git merge dev”会导致很多冲突。但是,我不想单独处理它们。相反,我只是想使用我的dev分支中的所有文件并将其合并到master中。但是这种“强制合并”并不像我想的那么容易。有人可以指出我正确的方向吗?
1> Mark Adelsbe..:
我只想使用我的dev分支中的所有文件
如果您是想使用dev分支中的所有文件-即master
应该撤消分支分支以来在分支上所做的任何更改-那么有两种方法。
合并-s我们的
你可以
git checkout dev
git merge -s ours master
git checkout master
git merge dev
这有点绕圈,因为没有“他们的”策略。(默认的合并策略有一个“其”策略选项,但是master
只要它们与from的更改不冲突,它仍会尝试应用from dev
;如果您想要的只是保留dev
版本,那不会因此,您可以使用该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
分支,使其指向与相同的提交dev
。
git checkout dev
git branch -f master