最近我开始研究一个大功能,所以我创建了一个新的feature/xyz
分支。问题是这个功能很大,所以我需要3个月才能完成它。我想安全地将develop
中的进度合并到我的功能分支,而不必担心来自develop
分支的更改将覆盖我已在功能分支中进行的更新。我之前尝试将develop
合并到feature/xyz
的尝试最终导致我在新功能中进行了一些更改。
实现这一目标的命令是什么?感谢
答案 0 :(得分:51)
只有您了解develop
和feature/xyz
上的代码如何对齐,而不是其他人。只有你才能以敏锐的方式正确地合并这两个流程。即使使用默认的合并策略,这些策略远不如-S ours
或-X theirs
那么危险,您仍然需要查看结果。
当然,您可能需要一些帮助,git会提供一些帮助。例如,您可以使用git记录的分辨率 - rerere来帮助您在最初创建一个之后做出相同的正确合并决策。
一个相当普遍且相对简单的模型,使用你为分支提供的名称,可以像你一样为你工作,
develop
是发展的主要推动力的分支xyz
是您开发功能xyz xyz_stage
是您合并develop
和xyz
代码的分支,保持该分支与develop
和{{1}的相应稳定点保持一致}}。当您准备发布功能xyz或其中的一部分时,这也是您最终合并回发展的分支。以上假设您不仅要将xyz
合并到xyz
,还要将xyz_stage
合并到develop
中,并确保xyz_stage
的部分{ {1}}到目前为止已发布到xyz
工作,并将相关测试与xyz_stage
中的代码一起传递。
尽管如此,您仍然需要选择如何使用develop
分支,您在该功能上工作,了解开发进度。
最干净的选择是 - 不要让它知道。这就是为什么你有xyz
两个开发流程汇集在一起的原因。只要不延长xyz_stage
的发展,这种方法就是可行和明智的。
当您对登台分支感到满意时,第二个选项是将xyz
合并回xyz_stage
。这样,您就可以继续保持稳定,并在顶部开发xyz
功能。
以下是该过程的简单说明,其中包含注释:
答案 1 :(得分:1)
使用git merge -s recursive -X ours
。这将导致两个分支中的冲突始终使用签出目录中的版本解决(在这种情况下为feature/xyz
)。
重要:与您的标题相反,此策略不一定“安全”:来自develop
的修改可能会与{{1}中的修改发生冲突}}。与往常一样,请确保正确测试合并的更改。
答案 2 :(得分:1)
根据我的经验,唯一的"安全"解决方案是始终手动检查并测试任何合并的结果。 --no-commit将进行合并,让你在提交之前检查它,或者你可以重置/修改,无论什么感觉更实用。获得三向合并工具非常有用。在没有合并冲突的情况下,有太多方法可以破解,依靠自动合并必然会让你陷入困境。如果你有100%的测试覆盖率,当然,你可以更轻松一点,但有多少项目可以真正声称? ; - )