[英]Git 'merge' by creating a new checkin based on another branch
我有一个git分支dev
,这正是我想要另一个git分支master
的位置。 master
有一些修补程序,它们在将来都比两者的共同祖先更远,因此此命令链会产生复杂而愚蠢的合并冲突:
git checkout master
git merge dev # Complicated merge conflicts. Boo hiss.
我想做的是在具有dev HEAD状态的master上进行新提交。 从那时起,事情可以以更加理智的方式进行
例:
dev: A ---> B ---> C ----> D
master: A ---> Y ---> Z ----> *
A是我的共同祖先。 Y和Z是冲突的修补程序更改,因此D,A和Z之间的三向合并是一团糟。
最后我想要这个结果:
要在master上进行新提交,使其完全匹配dev上的内容,可以执行以下操作:
git checkout dev # Get the working directory we want.
git symbolic-ref HEAD refs/heads/master # Move HEAD to master without changing
# index or working directory.
git commit # Create the new commit on master.
这将创建一个与dev分支分开的全新提交。
我的灵感来自这里: https : //stackoverflow.com/a/6070417/2348315
如果遵循此步骤,则开发人员和管理员之间的合并提交将需要解决这些单独的历史记录。 在此操作之后立即创建合并提交应该没有冲突,但是必须是合并提交而不是快速合并。
如果您正在寻找变化,并陷入了您要以描述方式解决的冲突情况,则此方法将很有意义。 如果您的工作流是要合并更改,那么@Cupcake的merge -s ours
方法似乎更合适。
有关重置很棒的书gitpro的详细信息: http ://git-scm.com/2011/07/11/reset.html
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.