首页 > 解决方案 > 合并、变基或分支以获得持久分支?

问题描述

从概念上讲:我有一个名为'core' 的master分支。

这个分支将永远存在。

每周一次,核心需要获取已对master所做的任何更改。

每月对核心所做的更改需要推送回master

core有时会有诸如feature1feature2 之类的分支,它们可能存在一两个月,然后它们将合并到core中,并且功能分支将被删除,然后core将在月底将这些更改推送到master 。

我可以使用 rebase 或 merge 来做到这一点,或者我可以在合并到master后每个月创建一个新的核心分支。

我认为做到这一点的最好方法是每周和每月使用“合并”,但我对 github 不太了解,所以这是正确的方法还是你预见到未来会出现任何问题?

          week1    week2     month end
--o--o--o--o--o--o--o--o--o--o--o--o--o--o--o master
  \        \         \         / \
   o--o--o--o--o--o--o--o--o--o---o--o--o--o core
          \              \             /
           o--o--o--o--o--o--o--o--o--o      feature

master 由一个大团队开发,core 有一个小团队,一个功能通常是一个人(尽管仍被推送到 github 以测试或演示功能),core 和 master 团队通常不会接触相同的文件。

标签: gitgithub

解决方案


您建议的工作流程有点类似于Git 流程(另请参阅此备忘单)。

关于您关于合并与变基的问题,应该注意 agit rebase是一种破坏性操作(不仅它会更改变基提交的 SHA1,而且源分支中每个提交的代码库都可能会编译,而这些提交中的一些或全部在变基后不再编译!)。相反,agit merge将保留来自两个处于危险中的分支的所有提交,并创建一个合并提交,如果需要,它可以合并冲突解决更改。

这个“缺点”git rebase可能是为什么在实践中,Git 流程总是使用实现的git merge(实际上git merge --no-ff,请参阅相应的文档)。

然而,一些团队可能会选择不同的工作流程来将贡献集成到 master 中,当功能分支和 master 之间存在一些冲突时需要使用git rebase origin/master(以便拥有更“漂亮”的线性历史)。不过,在这种情况下,建议检查每个 rebase 提交是否仍然编译(为了不妨碍bisecting)。


推荐阅读