GitFlow:安全地将开发更改合并到功能分支

时间:2014-02-09 15:54:18

标签: git git-flow

最近我开始研究一个大功能,所以我创建了一个新的feature/xyz分支。问题是这个功能很大,所以我需要3个月才能完成它。我想安全地将develop中的进度合并到我的功能分支,而不必担心来自develop分支的更改将覆盖我已在功能分支中进行的更新。我之前尝试将develop合并到feature/xyz的尝试最终导致我在新功能中进行了一些更改。

实现这一目标的命令是什么?感谢

3 个答案:

答案 0 :(得分:51)

唯一的安全因素是学习,辨别和频繁合并。

只有您了解developfeature/xyz上的代码如何对齐,而不是其他人。只有你才能以敏锐的方式正确地合并这两个流程。即使使用默认的合并策略,这些策略远不如-S ours-X theirs那么危险,您仍然需要查看结果。

当然,您可能需要一些帮助,git会提供一些帮助。例如,您可以使用git记录的分辨率 - rerere来帮助您在最初创建一个之后做出相同的正确合并决策。

一个相当普遍且相对简单的模型,使用你为分支提供的名称,可以像你一样为你工作,

  • develop是发展的主要推动力的分支
  • xyz是您开发功能xyz
  • 的分支
  • xyz_stage是您合并developxyz代码的分支,保持该分支与develop和{{1}的相应稳定点保持一致}}。当您准备发布功能xyz或其中的一部分时,这也是您最终合并回发展的分支。

以上假设您不仅要将xyz合并到xyz,还要将xyz_stage合并到develop中,并确保xyz_stage的部分{ {1}}到目前为止已发布到xyz工作,并将相关测试与xyz_stage中的代码一起传递。

尽管如此,您仍然需要选择如何使用develop分支,您在该功能上工作,了解开发进度。

最干净的选择是 - 不要让它知道。这就是为什么你有xyz两个开发流程汇集在一起​​的原因。只要不延长xyz_stage的发展,这种方法就是可行和明智的。

当您对登台分支感到满意时,第二个选项是将xyz合并回xyz_stage。这样,您就可以继续保持稳定,并在顶部开发xyz功能。

以下是该过程的简单说明,其中包含注释:

Feature xyz

答案 1 :(得分:1)

使用git merge -s recursive -X ours。这将导致两个分支中的冲突始终使用签出目录中的版本解决(在这种情况下为feature/xyz)。

重要:与您的标题相反,此策略不一定“安全”:来自develop的修改可能会与{{1}中的修改发生冲突}}。与往常一样,请确保正确测试合并的更改。

答案 2 :(得分:1)

根据我的经验,唯一的"安全"解决方案是始终手动检查并测试任何合并的结果。 --no-commit将进行合并,让你在提交之前检查它,或者你可以重置/修改,无论什么感觉更实用。获得三向合并工具非常有用。在没有合并冲突的情况下,有太多方法可以破解,依靠自动合并必然会让你陷入困境。如果你有100%的测试覆盖率,当然,你可以更轻松一点,但有多少项目可以真正声称? ; - )