Git是否允许无根据合并?

时间:2015-09-04 19:36:16

标签: git tfs merge git-merge tfvc

我知道Team Foundation版本控制中的无基础合并是危险的。我想知道Git是否也有危险。

如果您不熟悉无基础合并,here's an example。红色虚线是一个毫无根据的rebase / merge。

使用Git执行此操作是否安全?

3 个答案:

答案 0 :(得分:9)

嗯,是的,不是。 Team Foundation版本控制(TFVC)强制执行分支层次结构,并且它具有一个规则,您只能从分支合并到其父级或子级。在您提供的图像中,您可以将B合并到C,而是无基础合并。将B合并到C中将使用B3作为共同的祖先并产生一个很好的,易于处理的三向合并。

然而,TFVC 不允许你直接将A合并到C.你应该将A合并到B中,然后将结果合并到C.如果你想绕过这个工作流程,你'陷入了无根据的合并,它跳过了共同的祖先计算。结果是你在没有共同祖先的情况下进行三向合并 - 这两个文件看起来像是新添加的,并且它们之间的任何差异将被视为冲突。

这是一个巨大的痛苦。

Git不会尝试强制执行任何分支层次结构,因此在您的插图中,您可以从C合并到A而不会受到惩罚。在这种情况下,A3将是共同的祖先,您将得到以下图表:

                C  1--2--3----M
                  /          /
        B  1--2--3--4--5    /
          /                /
A  1--2--3--4--5-----------

所以这个场景不是 Git中的无基础合并,但是 仍然可以在Git中进行无基础合并。如果您尝试合并两个具有 no 共同祖先(没有合并基础)的分支,那么这将是一个无基础合并,它将具有在TFVC中进行无基本合并时发生的所有问题。 / p>

您可以通过创建没有父母的新分支(通过git checkout --orphan)来尝试此操作。

答案 1 :(得分:0)

您可以使用git cherry-pick将任意提交应用于任何分支。

答案 2 :(得分:0)

你用红色显示的是与git完全正常的合并,除了一些正常的'之外你不会遇到任何困难。如果您在同一文件中的同一位置更改2个分支中的内容,则会发生合并冲突。否则,没问题!

但是如果你不需要实现合并,那么你可以选择。

但是git的优点是你可以尝试撤消(合并很容易撤消!)。所以没有太多困难,你可以尝试合并,看看会发生什么,回答你自己的问题;-)并撤消,如果你不满意!

欢迎远离tfs ;-)