这种情况下最好的分支策略是什么?
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)
现在任何冲突只需要在创建新提交 *
时解决一次。 f1
到 f3
保持不变,而不是每个都被相应的新提交替换。
如果结果 F
已准备好合并到 M
,您只需要再次创建一个新提交(应该是 conflict-free,因为 *
已经解决了):
m1 -- m2 -- m3 ----+--- ** (M)
\ \ /
f1 -- f2 -- f3 -- * (F)
明确地说,**
有两个 parents:*
和 m3
。 *
还有两个parents:m3
和f3
。
还有 rerere
命令,可用于“重播”在创建 f2'
时对创建 f1'
所做的相同修复。我会让你参考 git help rerere
而不是(糟糕地)在这里重述它。 (rerere
对于避免 F
中的多次“人为”合并提交也很有用;请再次查看有关该主题讨论的帮助。)
假设我有 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)
现在任何冲突只需要在创建新提交 *
时解决一次。 f1
到 f3
保持不变,而不是每个都被相应的新提交替换。
如果结果 F
已准备好合并到 M
,您只需要再次创建一个新提交(应该是 conflict-free,因为 *
已经解决了):
m1 -- m2 -- m3 ----+--- ** (M)
\ \ /
f1 -- f2 -- f3 -- * (F)
明确地说,**
有两个 parents:*
和 m3
。 *
还有两个parents:m3
和f3
。
还有 rerere
命令,可用于“重播”在创建 f2'
时对创建 f1'
所做的相同修复。我会让你参考 git help rerere
而不是(糟糕地)在这里重述它。 (rerere
对于避免 F
中的多次“人为”合并提交也很有用;请再次查看有关该主题讨论的帮助。)