将一个分支合并到另一个分支的文件夹中

艾伦

我有一个分支A,文件夹名为foo另一个名为B的分支仅包含文件夹的内容foo是否可以将分支B合并到分支A的文件夹foo中?

分支A包含例如

foo/
    hello_world.c
goo/
    AliceAndTom.c

分支B仅包含文件夹foo /的内容

./
    hello_world.c
    hello_world.h

合并分支B后在分支A中获得的结果:

foo/
    hello_world.c
    hello_world.h
goo/
    AliceAndTom.c

编辑:分支B是使用git命令创建的git filter-branch --subdirectory-filter dir/to/filter -- subdir_branch

马克·阿德尔斯伯格

您不能直接将其合并。

关于git的重命名检测在这里是否有帮助的评论中有些混淆。根据您所说的创建分支(使用filter-branch)的方式,很可能不会创建分支这是因为新分支可能与旧分支没有共同的祖先。[1]

因此,首先您必须解决让git从分支识别相应文件的问题;然后您必须解决以下问题:对于该文件的两个当前状态,它仍然不知道最新的共同祖先,因此合并将无法顺利进行。(两个分支上都存在的每个文件很可能会在整个文件上发生冲突,而不会真正合并任何文件。)

这是由于“不同分支上的内容不同”而引起的问题之一;这不是git的工作原理,它可以使跨分支的更改集成变得非常乏味。

filter-branch运行以来,这将是多么繁琐取决于每个分支上文件的更改量。我能想到的最通用的过程是:

(1)编写脚本,将文件移回其子目录

(2)filter-branch在较新的分支上运行(使用上面的脚本作为树过滤器),创建另一个分支,其结构更接近原始分支

(3)确定新分支中与原始分支中的提交相对应的最后一个提交

(4)用于git replace代替上面提到的提交来代替原始分支中的相应提交。

(5)现在,您应该能够将新分支合并到原始分支。然后,您可以撤消git replace并可能处置新分支。

有关每个步骤的详细信息,请参阅。不是一个简单的过程,因此,如果要继续使用它,请参考相关命令的文档。


[1]-更具体地说,要应用重命名检测,git必须查看一个既删除文件又创建具有足够相似内容的另一个文件(位于不同路径)的补丁。

如果您从分支开始master,然后在分支上进行了提交,以移动文件,那么现在您将看到类似

x -- x -- O -- A <--(master)
           \
            x -- x -- B <--(bramch)

合并branch到时master,git将查看O之间的修补程序,该修补程序B满足重命名检测的条件(只要移动的文件变化不大)。

但是filter-branch可能创造了一个完全独立的历史

x -- x -- x -- A <--(master)

x -- x -- B <--(branch)

默认情况下,合并将失败(没有共同的历史记录),如果您使合并没有失败(通过说允许不相关的历史记录),则合并的作用就好像合并基础为空TREE(即没有文件)。从补丁到A创建foo/file,并从该补丁,以B创建file,但是没有打补丁的一条路径都删除该文件并创建它的其他,所以重命名检测不会发生。合并将创建文件的第二个副本。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

当另一个分支合并到一个分支时,如何找到在一个分支中更改的文件(忽略来自合并分支的更改)?

通过VSTS API将一个分支合并到另一个分支

vscode-将一个分支合并到另一个分支

如何将一个分支更改合并到另一个分支?

如何将文件从一个分支的目录合并到另一个分支?

将一个文件夹与源合并到另一个

将存储库合并到另一个存储库的文件夹中

如何将GIT中的2个分支合并到一个带有2个文件夹的分支中

如何将一个 git 分支强行合并到另一个

将git repo合并到另一个repo的分支中

如何将当前分支合并到另一个分支

如何将活动分支合并到本地另一个分支?

禁用将分支合并到另一个分支的可能性

Github将另一个分支合并到您的本地master分支

我将另一个分支合并到master后,master分支未显示所有文件

如何防止一个git分支合并到另一个分支?

使用git从一个分支合并到另一个分支

如何将一个分支的所有内容合并到另一个分支?

Bitbucket管道-将一个分支合并到另一个分支的可能性

如何将一个分支零星合并到另一个分支

Git:将多个提交从一个分支合并到另一个分支

如何将所有提交从一个分支合并到另一个分支?

如何将一个远程分支合并到另一个远程分支?

将未跟踪的文件夹复制到另一个分支

如何在没有某些文件的情况下将一个分支合并到另一个分支?

是否可以仅使用某些文件从一个分支合并到git中的另一个分支?

如何在保持旧行的同时将一个分支合并到Git中的另一个分支?

一次性将所有暂存的文件,文件夹等从一个分支转移到另一个分支

将子树合并到另一个分支:安全吗?