GitFlow:如何安全地将 develop 分支的更改合并到 feature 分支?

57

最近我开始处理一个重要的功能,所以我创建了一个新的feature/xyz分支。问题是这个功能很大,我需要大约三个月的时间来完成它。 我想安全地将在develop中进行的进展合并到我的特性分支中,而不必担心develop分支中的更改会覆盖我已经在我的特性分支中进行的更新。我之前尝试将develop合并到feature/xyz中,结果导致我在新功能中已经做出的一些更改被还原了。

如何执行这个命令? 谢谢


我的上一次尝试将develop合并到feature/xyz中,导致了一些已经应用于新特性的更改被还原了。这通常不应该发生-你的工作流程应该正常工作。是否有合并冲突?你做了大量重构吗? - Bert F
没有合并冲突。如果文件在“develop”和“feature/xyz”分支中都被更改,Git会优先选择“develop”的版本。我真的不记得具体发生了什么,因为我后来才发现问题。 - Ilija
3个回答

68

唯一的安全措施是学习、辨识和频繁地合并。

只有您能理解developfeature/xyz 上的代码是如何对齐的,没有其他人能够做到。只有您能以明智的方式正确地合并这两个分支。即使使用默认的合并策略,这些策略远不像我们所想的那样危险,比如-S ours-X theirs,您仍然需要始终审查结果。

当然,您可能需要一些帮助,git可以提供一些帮助。例如,您可以使用git记录的解决方案- rerere来帮助您在最初做出正确合并决策后进行相同的正确合并决策。

一个相当常见且相对简单的模型,根据您为分支提供的名称,可以像这样为您工作,

  • develop是主要开发活动发生的分支
  • xyz是您开发功能xyz的分支
  • xyz_stage是您将developxyz 代码合并的分支,将该分支与developxyz相关稳定点一致。这也是您最终准备发布功能xyz或其一部分时将要合并回develop的分支。

以上假设不仅您将xyz合并到xyz_stage 中,而且您还会不时地将develop合并到xyz_stage中,并确保在与develop的代码结合使用时,已经释放到xyz_stage中的xyz部分可行并通过相关测试。

尽管如此,您仍然需要选择如何使xyz分支在工作时了解develop的进展情况。

最干净的方法是-不要让它意识到。这就是为什么你有xyz_stage,在这里两个开发流程合并。只要xyz的开发不会延长,这种方法是可行和合理的。
第二种选择是在你对分支进行了满意的测试之后,将xyz_stage合并回xyz。这样,你就会有一个稳定点,可以继续并在其上开发xyz功能。
下面是一个简单的流程图,带有注释:

Feature xyz


创建阶段分支运作良好。首先,我们将develop分支合并到stage分支中,然后将feature合并到stage中,解决任何冲突,最后将其合并回feature分支。 - Ilija

2

根据我的经验,唯一“安全”的解决方案是始终手动检查和测试任何合并的结果。--no-commit将暂存合并结果以便您在提交之前进行检查,或者您可以重置/修改,无论哪种方式更实用。使用三方合并工具可以非常有帮助。即使没有合并冲突,事情仍然会出现许多问题,因此依赖自动合并很容易让你陷入麻烦。如果您拥有100%的测试覆盖率,那么当然可以放松一些,但真正能够宣称如此的项目有多少呢?;-)


1
使用git merge -s recursive -X ours。这将导致两个分支中的冲突始终解决为已检出目录中的版本(在此示例中为feature/xyz)。
重要提示:与您的标题相反,此策略不一定是“安全的”:来自develop的修改可能会与feature/xyz中的修改冲突。像往常一样,请确保正确测试合并后的更改。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接