这种情况下最好的分支策略是什么?

what's best branching stragegy for this scenario?

假设我有 Master 分支 M 和 Feature 分支 F。两个分支都在持续开发中。对于下一个发布版本,我只想要 M 中的所有内容。在那之前,每天都会发布测试环境,其中包括来自 M 和 F 的 material。

目前我有 F 分支 M。每天部署到测试,我会先将 F 分支变基到 M,然后部署 F。这一直很好,直到我不得不对冲突进行手动合并。老实说,我不确定 rebase 到底是如何工作的。有时我觉得我在同一个会话中多次解决同一个冲突。似乎我将 2 个分支分开的时间越长,每次变基时我就越需要解决相同的冲突。如果我在每个分支中继续编辑同一组文件似乎会有所帮助,但有时这是不现实的。你需要做你需要做的来完成一个功能,对吧?

对于这种情况,什么是好的策略?

您可能 必须解决相同的冲突。 Rebase 为分支中的每个提交创建一个新的提交。也就是说,它变成了

m1 -- m2 -- m3 (M)
 \
  f1 -- f2 -- f3 (F)

进入

m1 -- m2 -- m3 (M) -- f1' -- f2' -- f3' (F)

如果 f1 引入了冲突,您必须更正它才能创建 f1',但您可能必须再次更正它才能创建 f2' ,等等。

另一种方法是将 M 合并到 F 中,得到

m1 -- m2 -- m3 ----- (M)
  \                 \
   f1 -- f2 -- f3 -- * (F)

现在任何冲突只需要在创建新提交 * 时解决一次。 f1f3 保持不变,而不是每个都被相应的新提交替换。

如果结果 F 已准备好合并到 M,您只需要再次创建一个新提交(应该是 conflict-free,因为 * 已经解决了):

m1 -- m2 -- m3 ----+--- ** (M)
  \                 \ /
   f1 -- f2 -- f3 -- * (F)

明确地说,** 有两个 parents:*m3*还有两个parents:m3f3

还有 rerere 命令,可用于“重播”在创建 f2' 时对创建 f1' 所做的相同修复。我会让你参考 git help rerere 而不是(糟糕地)在这里重述它。 (rerere 对于避免 F 中的多次“人为”合并提交也很有用;请再次查看有关该主题讨论的帮助。)