我仍在尝试从 git 转向 git-flow。我知道我可以在 git-flow 中使用任何类型的 git 功能,但我最感兴趣的是它自动处理的内容。
假设有两个开发人员 Alice 和 Bob,分别在功能 A 和 B 上工作。当 Alice 完成后,她可以根据提交 Cgit flow feature finish A
在她的本地分支上创建一个合并提交develop
。现在如果 Bob 同时完成了他的功能,并且他获取了相同的东西,他的合并提交也将基于 C . 现在如果 Alice 推送然后 bob 再次获取,他将不得不合并或变基,我们最终会在分支上得到非线性历史develop
,以防他合并。
到目前为止这是正确的,还是 git-flow 以某种方式自动处理这种情况?如果有一些自动机制,必须设置什么才能使其工作?
最简单的解决方案可能是始终develop
在完成功能之前获取。但是,我不确定这实际上是否可行,具体取决于共享存储库的方式(当时可能不可用)。
编辑(问题的澄清):
正如答案所暗示的那样,我的例子并不清楚。所以首先我认为是问题的图片:
C 是开发分支上的初始提交。
Alice 在特性分支上创建了一些特性工作:
develop feature/A
| |
v v
C-A1-A2-A3-A4
同时,Bob 也为另一个功能工作
C-A1-A2-A3-A4
\
B1-B2-B3-B4
现在 Alice 完成了这个功能并且合并提交被添加到开发中(我想要那个)。
A1-A2-A3-A4
/ \
C- - - - MA
现在 Bob 完成了这个功能,并再次添加了一个合并提交来开发(我也想要那个,只是在另一个地方:
A1-A2-A3-A4
/ \
C- - - - MA <- develop for Alice
\
\ - - - - MB <-develop for Bob
\ /
B1-B2-B3-B4
然而现在 Alice 或 Bob 必须合并开发,创建一个额外的提交:
A1-A2-A3-A4
/ \
C- - - - MA-MAB <- I don't want this MAB commit
\ /
\ - - - - MB <-develop for Bob
\ /
B1-B2-B3-B4
我想要的是这样的:
A1-A2-A3-A4
/ \
C- - - - MA-MB
\ /
B1-B2-B3-B4- -
如您所见,历史仍然是非线性的,但是开发分支的主线仅包含来自功能的合并提交(并且在其他情况下没有额外的合并提交)。
我喜欢这一点的是,您可以轻松地跟踪历史中的更改,并查看它们是否属于以前的功能分支,或者它们是否在开发中合并。所有这些信息都可以直接从 DAG 中获得。
此外,如果您在开发中为合并提交使用好的消息,在第二种情况下,您可以通过始终关注开发中的第一个父级轻松导出更改日志。但是,在第二种情况下,您有时只需要关注第一个父母,有时需要关注多个父母。而且我看不到什么时候可以编写代码的简单方法。