我开始工作主分支分支。大约一年前,我创建了另一个分支dev,其中我做了一些修改。从那时起,我继续在开发分支上工作。现在我想将开发合并到主导致很多冲突。我想通过覆盖主分支的内容来将开发者合并到主控中,即对于出现的任何冲突,我想保留开发者分支的代码版本。如何做呢 ?git如何通过完全覆盖主分支将分支合并到主分支
回答
你要使用的策略,这是使用-X标志
git checkout master
git merge -X theirs dev
树立了“用他们的合并”你可以用-X
开关指定the strategy option:
git checkout master
git merge -X theirs dev
有点说明。 -X theirs
的意思是:使用递归策略与合并但回退到其更改如果策略不能解决冲突。
这是-s ours
不同(因为某些原因没有-s theirs
),这将是一个贪婪的拿我们总是解决冲突。
git-merge(1)
合并策略部分对此提供了更深入的解释。
可以强制推到主与所有你提交
git push -f origin master
由于Paulo Bu noted,GIT中提供了这种不同的方法,当你想用“我们”的方式合并,但只有一个“出来的盒子“,当你想要一个”他们“的方法合并。值得说明两个举例:
$ git merge -s ours deadbranch # merge deadbranch and ignore all its code
或:
$ git merge -X ours livebranch # merge livebranch but use ours when conflicting
也让我在这里指出,当您使用git merge
,Git会先找到“合并基地”,在该点两个分支机构上次同步:
o - X <-- master
/
o - o - B
\
o - Y <-- otherbranch
这里B
代表提交那就是合并基础,X
是你分支的末端(master
)和Y
是另一个分支的提示。 git会做的是diff B
vs X
和B
vs Y
。
比方说,在 “我们的” 分支,master
,我们有文件unchanged
,no-conflicts
,和removed
。这些名字是关于其他两个分支发生的事情。
文件unchanged
是不变的待合并分支(即,DIFF从B
到Y
显示什么都没有文件unchanged
)。 git merge
永远不会触及它,所以无论我们给git merge
的参数如何,都不会改变。
其他文件在master
和/或其他分支中有一些变化。
文件no-conflicts
在master
的顶部有一处变化,在底部的另一处有一处变化。这两个变化不冲突。 git merge -s recursive
将结合更改,无论您是否使用-X ours
选项。然而,git merge -s ours
将放弃其更改,保留我们的文件版本no-conflicts
。对于这个的情况,结果是不同的。
文件在主文件的顶部有一个变化,另一个分支的变化也在顶部。 (这些变化可能在任何地方,它们只是必须重叠。“在顶部”使它重叠。)这意味着这些变化是冲突的。使用git merge -s recursive
,您会收到投诉并必须解决冲突。添加-X ours
和git会采取你的改变,抛弃他们的改变。使用git merge -s ours
,git会把你的改变抛诸脑后 - 因此对于这个的情况,结果是一样的。
文件removed
在master
中没有变化,但在其他分支中被删除。在这种情况下,git merge -s recursive
将删除该文件,无论您是否使用-X ours
。但是,git merge -s ours
将忽略删除。
总之,-s ours
和-s recursive -X ours
之间的区别是,同前,的git 完全忽略DIFF从B
到Y
;对于后者,git会尝试组合差异B
- 至 - X
(我们)和B
- 至 - Y
(他们的),但是在组合期间发生冲突时,它会选择B
至X
更改。
随着-X theirs
(这是真的-s recursive -X theirs
),混帐尝试制作diff结合起来,并在发生冲突的情况下,选择在B
至 - X
变化B
至 - Y
变化。
这是可能实现的-s theirs
即使混帐没有这个建在等价的。要做到这一点,使用git merge --no-commit otherbranch
,然后git rm -rf .
从顶层除去最后的合并结果(有或无冲突) ,然后从顶层git checkout otherbranch -- .
根据otherbranch
重新填充树和索引。然后简单地git commit
的结果。然而,这是非常罕见的,这就是为什么git没有将其作为内置策略。
- 1. Git:将分支合并到主分支或主分支
- 2. 合并更改盖分支到主分支中的git
- 3. 切换主分支后git合并到主分支中
- 4. Git合并分支与主
- 5. 如果您将某个分支合并到主分支中,是否合并了分支覆盖的差异?
- 6. 如何将未创建主分支到GIT中的主分支
- 7. git将分支合并到分支
- 8. VSTS合并的Git分支孙子到主后子分支已合并到主
- 9. 将分支合并到主干。更改分支的主干
- 10. 2分支主分支 - 合并分支1回到主分支并使用分支2中的代码?
- 11. 如何将分支分支直接合并到主干
- 12. 如何将开发分支合并到SourceTree中的主分支?
- 13. 合并分支'主'
- 14. Git:我应该如何将分支和分支分支变更为主分支?
- 15. 将多个git分支合并为主?
- 16. 合并的Git分支到主
- 17. 合并分支到主
- 18. git合并分支覆盖目的地
- 19. Git如何合并原始回购的主分支到分支回购的主分支?
- 20. 将基于主题分支的分支的更改合并到git中的其他主题分支
- 21. Git&自动合并分支与主分支
- 22. Git新主分支
- 23. Git:如何合并/更新分支的部分从/到主?
- 24. 主人合并到工作分支即使我合并工作分支到主
- 25. 如何合并SVN分支到主干?
- 26. https://bitbucket.org/xxx/yyy Git合并分支'主'
- 27. 从原始分支/主分支到本地主分支
- 28. Subversion - 将分支合并到主干
- 29. 将SVN分支合并到主干
- 30. 跨主分支合并?
什么是-X在这里? –
@hrehman策略选项。添加了一个链接供进一步参考。 –
在这里要小心,'-X我们'或'-X他们'与''我们''是完全不同的。没有“他们”。这听起来像'-X他们'是OP想要的,所以我相信这是正确的答案(并提高了它)。 – torek