最近我开始处理一个重要的功能,所以我创建了一个新的feature/xyz
分支。问题是这个功能很大,我需要大约三个月的时间来完成它。 我想安全地将在develop
中进行的进展合并到我的特性分支中,而不必担心develop
分支中的更改会覆盖我已经在我的特性分支中进行的更新。我之前尝试将develop
合并到feature/xyz
中,结果导致我在新功能中已经做出的一些更改被还原了。
如何执行这个命令? 谢谢
最近我开始处理一个重要的功能,所以我创建了一个新的feature/xyz
分支。问题是这个功能很大,我需要大约三个月的时间来完成它。 我想安全地将在develop
中进行的进展合并到我的特性分支中,而不必担心develop
分支中的更改会覆盖我已经在我的特性分支中进行的更新。我之前尝试将develop
合并到feature/xyz
中,结果导致我在新功能中已经做出的一些更改被还原了。
如何执行这个命令? 谢谢
只有您能理解develop
和feature/xyz
上的代码是如何对齐的,没有其他人能够做到。只有您能以明智的方式正确地合并这两个分支。即使使用默认的合并策略,这些策略远不像我们所想的那样危险,比如-S ours
或-X theirs
,您仍然需要始终审查结果。
当然,您可能需要一些帮助,git可以提供一些帮助。例如,您可以使用git记录的解决方案- rerere来帮助您在最初做出正确合并决策后进行相同的正确合并决策。
一个相当常见且相对简单的模型,根据您为分支提供的名称,可以像这样为您工作,
develop
是主要开发活动发生的分支xyz
是您开发功能xyz的分支xyz_stage
是您将develop
和xyz
代码合并的分支,将该分支与develop
和xyz
相关稳定点一致。这也是您最终准备发布功能xyz或其一部分时将要合并回develop的分支。以上假设不仅您将xyz
合并到xyz_stage
中,而且您还会不时地将develop
合并到xyz_stage
中,并确保在与develop
的代码结合使用时,已经释放到xyz_stage
中的xyz
部分可行并通过相关测试。
尽管如此,您仍然需要选择如何使xyz
分支在工作时了解develop的进展情况。
xyz_stage
,在这里两个开发流程合并。只要xyz
的开发不会延长,这种方法是可行和合理的。xyz_stage
合并回xyz
。这样,你就会有一个稳定点,可以继续并在其上开发xyz
功能。根据我的经验,唯一“安全”的解决方案是始终手动检查和测试任何合并的结果。--no-commit将暂存合并结果以便您在提交之前进行检查,或者您可以重置/修改,无论哪种方式更实用。使用三方合并工具可以非常有帮助。即使没有合并冲突,事情仍然会出现许多问题,因此依赖自动合并很容易让你陷入麻烦。如果您拥有100%的测试覆盖率,那么当然可以放松一些,但真正能够宣称如此的项目有多少呢?;-)
git merge -s recursive -X ours
。这将导致两个分支中的冲突始终解决为已检出目录中的版本(在此示例中为feature/xyz
)。develop
的修改可能会与feature/xyz
中的修改冲突。像往常一样,请确保正确测试合并后的更改。