我有一个功能分支和一个主分支,我想将主分支合并到功能分支。问题是:两个分支的目录结构不一样。
功能分支的目录结构如下:
|── app1
│ ├── common
│ └── static
└── app2
主分支的目录结构:
|── app1
│── common
│── static
└── app2
现在在master分支中我更新文件夹'common'和'static'。然后,我将合并master分支到功能分支,以更新'app1'下的'common'和'static'文件夹。但是,由于两个分支的结构不相同,git会将这两个文件夹视为新的。如何进行合并以更新功能分支?
答案 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.renameLimit
和merge.renameLimit
。另请参阅How do I merge changes in Git in files that I moved?)