Git是否允许无根据合并?

chr*_*989 0 git merge tfs git-merge tfvc

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

如果你不熟悉baseless merge,这是一个例子.红色虚线是一个毫无根据的rebase/merge.

用Git做这个是安全的吗?

Edw*_*son 9

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

然而,TFVC 不会让你合并一个直接进入C.预计您将合并为B,那么如果你想绕过这个工作流程,你坚持这样做毫无根据的合并,这将跳过结果为C.合并共同的祖先计算.结果是你在没有共同祖先的情况下进行三向合并 - 这两个文件看起来像是新增加的,并且它们之间的任何差异都将被视为冲突.

这是一个巨大的痛苦.

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

                C  1--2--3----M
                  /          /
        B  1--2--3--4--5    /
          /                /
A  1--2--3--4--5-----------
Run Code Online (Sandbox Code Playgroud)

所以,这种情况下是不是在Git中毫无根据的合并,但是你可以仍然在Git的毫无根据的合并.如果您尝试合并两个没有共同祖先(没有合并基础)的分支,那么这将是一个无基础合并,它将具有在TFVC中进行无基本合并时发生的所有问题.

你可以通过创建一个没有父母(via git checkout --orphan)的新分支来尝试这个.