【问题标题】:git merge two branches with different directory structuresgit合并两个具有不同目录结构的分支
【发布时间】:2017-05-18 16:52:18
【问题描述】:

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

特性分支的目录结构如下:

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

master分支的目录结构:

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

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

【问题讨论】:

    标签: git github merge


    【解决方案1】:

    两个分支的目录结构并不是特别相关,除了merge base提交相比。

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-10
      • 1970-01-01
      • 1970-01-01
      • 2012-12-24
      • 2012-08-23
      • 1970-01-01
      • 2021-03-11
      相关资源
      最近更新 更多