git合并两个具有不同目录结构的分支

时间:2017-05-18 07:35:19

标签: git github merge

我有一个功能分支和一个主分支,我想将主分支合并到功能分支。问题是:两个分支的目录结构不一样。

功能分支的目录结构如下:

|── app1
│   ├── common
│   └── static
└── app2

主分支的目录结构:

|── app1
│── common
│── static
└── app2

现在在master分支中我更新文件夹'common'和'static'。然后,我将合并master分支到功能分支,以更新'app1'下的'common'和'static'文件夹。但是,由于两个分支的结构不相同,git会将这两个文件夹视为新的。如何进行合并以更新功能分支?

1 个答案:

答案 0 :(得分:2)

合并基础提交相比,两个分支的目录结构不是特别相关,之外。

Git通过将合并基础提交与两个分支提示进行比较来完成合并。所以你的问题是错误的:它确实应该关注合并基础提交与两个提交提交的比较。当然,如果两个分支提示具有不同的目录布局,则最多其中一个可以匹配合并库的目录布局。但 与匹配的可能性是可能的。

当Git执行两个差异时,从合并基础到尖端#1,然后从合并基础到尖端#2,它可以在两个差异中启用重命名检测。如果重命名检测正确找到所有重命名的文件,Git将正确合并文件。无论Git 失败以正确识别相同内容不同名称的文件,您都必须手动合并文件。

您可以使用-X find-renames=<n>-X rename-threshold=<n>参数帮助Git进行重命名检测。这个数字 n 是相同的&#34;相似性指数&#34;参数您可以git diff-M传递给--find-renames。 (rename-threshold名称是旧名称,最近相对更改,因此git merge选项与git diff匹配。)请注意, Git将重命名检测的文件数量为多少git merge(现在为1000)的此限制默认值高于git diff(现在为400)。 (这些限制在较旧版本的Git中较小,在1.7.5之前,但都是可配置的;请参阅the git config documentation中的diff.renameLimitmerge.renameLimit。另请参阅How do I merge changes in Git in files that I moved?