git - Git强制合并
问题描述
我想知道我应该怎么做才能强制从 dev 分支合并到我的 master 分支?使用“git merge dev”会导致很多冲突。但是,我不想单独处理它们。相反,我只想使用我的 dev 分支中的所有文件并将其合并到 master 中。但是这种“强制合并”并不像我想象的那么容易。有人可以指出我正确的方向吗?
解决方案
我只是想使用我的 dev 分支中的所有文件
如果你的意思是你想使用你的 dev 分支中的所有文件 - 即,由于分支分歧而对分支所做的任何更改都master
应该撤消 - 那么有几种方法。
合并 -s 我们的
你可以
git checkout dev
git merge -s ours master
git checkout master
git merge dev
这有点迂回,因为没有“他们的”策略。(默认合并策略有一个“他们的”策略选项,但它仍然会尝试应用更改,master
只要它们与更改不冲突dev
;如果你想要的只是保留dev
版本,那不会' t 工作。)因此,您使用该策略在所有文件的版本之间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
推荐阅读
- arrays - 替换数组中的多次出现 - Swift 4.1
- javascript - 我可以更改 javascript: hasFocus() 的文档方法以始终返回“true”吗?
- python - Heroku 无法安装 pywin32 库
- jquery - 错误 TS2304:在角度 5 组件中找不到 $
- python-3.x - 使用 Python 自动选择文件
- sql - 从 SQL Management Studio 触发的意外 SQL 注入
- python - 从列表中挑选项目
- php - 如何将多个数组转换为单个数组这种格式
- php - 在 PHP 中写入文件被认为是危险的吗?
- javascript - javascript交换html输入日期