我正在努力从git向git-flow转移。我知道我可以在git-flow中使用任何类型的git功能,但我主要感兴趣的是它自动处理的部分。
假设有两个开发者Alice和Bob,分别在功能A和B上工作。当Alice完成时,她可以使用
到目前为止,这正确吗?git-flow是否以某种自动方式处理此情况?如果有自动机制,则必须设置什么才能使其正常工作?
最简单的解决方案可能是在完成功能之前始终获取
编辑(问题的澄清):
正如答案所建议的那样,我的示例不太清楚。因此,首先是我认为存在问题的图片:
C是在开发分支上的初始提交。
Alice在功能分支上创建一些功能工作:
现在Alice完成了功能,合并提交已添加到开发分支(我想要这样)。
然而现在,Alice或Bob必须合并develop分支,创建一个额外的提交:
我希望能够有以下类似的东西:
正如您所见,历史仍然是非线性的,但是开发分支的主要线路仅包含来自功能的合并提交(而不像其他情况下那样有额外的合并提交)。
我喜欢这一点的原因是,您可以轻松地跟踪历史更改,并查看它们是否属于以前的功能分支,还是合并到开发分支中的。所有这些信息都可以直接从DAG中推导出来。
此外,如果您在开发分支上使用良好的合并提交消息,在第二种情况下,您可以通过始终遵循开发分支上的第一个父级轻松推导出更改日志。但是,在第二种情况下,有时需要仅遵循第一个父级,有时需要遵循不止一个父级。我无法看到何时进行编码的简单方法。
假设有两个开发者Alice和Bob,分别在功能A和B上工作。当Alice完成时,她可以使用
git flow feature finish A
在基于提交C的本地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完成了该功能,并再次将合并提交添加到develop分支(我也希望如此,只是在另一个位置):
A1-A2-A3-A4
/ \
C- - - - MA <- develop for Alice
\
\ - - - - MB <-develop for Bob
\ /
B1-B2-B3-B4
然而现在,Alice或Bob必须合并develop分支,创建一个额外的提交:
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中推导出来。
此外,如果您在开发分支上使用良好的合并提交消息,在第二种情况下,您可以通过始终遵循开发分支上的第一个父级轻松推导出更改日志。但是,在第二种情况下,有时需要仅遵循第一个父级,有时需要遵循不止一个父级。我无法看到何时进行编码的简单方法。