You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从同一仓库的两个分歧分支创建Git单体仓库

问题:将Git两个分歧分支合并到新仓库的独立文件夹并自动解决冲突

我正在处理一个Git仓库,该仓库包含两个分歧分支,二者均部署在生产环境的相邻独立文件夹中。我希望创建一个新的Git仓库来复刻此生产环境的文件夹结构,使两个分支的内容都存放在主分支的对应文件夹内,最终结构如下:

git/branch-one # 存放branch-one的所有文件
git/branch-two # 存放branch-two的所有文件

我目前的尝试步骤如下:

  • 从branch-one分支创建新分支,使用git mv将所有文件移动到git/branch-one文件夹
  • 从branch-two分支创建新分支,使用git mv将所有文件移动到git/branch-two文件夹
  • 创建一个全新的仓库,将现有仓库添加为远程仓库
  • 使用--allow-unrelated-histories参数合并现有仓库的分支:
git merge -m "Integrating branch one into monorepo" existing-repo/branch-one-monorepo --allow-unrelated-histories
git merge -m "Integrating branch two into monorepo" existing-repo/branch-two-monorepo --allow-unrelated-histories

此时我遇到了一系列合并冲突,这符合预期,因为这些分支在早期阶段存在大量重叠内容。请问是否有自动解决这些冲突的方法?我最终希望保留尽可能完整的提交历史,但如果可以的话,也不介意历史中存在当前文件各版本的重复项。由于我刚接触这个代码库,非常希望避免手动处理冲突。


自动解决冲突的可行方案

方法1:使用git read-tree直接导入分支内容(零冲突)

这种方法无需执行合并操作,直接将两个分支的内容分别导入新仓库的目标路径,同时完整保留原分支的提交历史,完全规避冲突:

  1. 创建并初始化新仓库:
mkdir new-monorepo && cd new-monorepo
git init
  1. 添加原仓库为远程源并拉取所有分支:
git remote add existing-repo <原仓库的URL地址>
git fetch existing-repo
  1. 将branch-one的内容导入到git/branch-one路径:
git read-tree --prefix=git/branch-one/ existing-repo/branch-one
git commit -m "导入branch-one到git/branch-one目录"
  1. 将branch-two的内容导入到git/branch-two路径:
git read-tree --prefix=git/branch-two/ existing-repo/branch-two
git commit -m "导入branch-two到git/branch-two目录"

说明:该操作通过指定路径前缀,让两个分支的内容完全隔离在不同文件夹中,Git不会判定存在重叠文件,因此不会产生任何冲突。你可以通过git log existing-repo/branch-one查看原分支的完整提交历史,也可以用git log --follow git/branch-one/[文件名]追踪单个文件的所有变更记录。

方法2:调整合并策略自动处理冲突

如果坚持使用合并方式,可以通过指定Git合并策略参数,自动解决根目录公共文件(如README、.gitignore等)的冲突:

  • 若想保留第一个合并分支(branch-one)的根目录文件,丢弃第二个分支的对应文件,执行合并时添加-X ours参数:
git merge -m "Integrating branch two into monorepo" existing-repo/branch-two-monorepo --allow-unrelated-histories -X ours
  • 若想保留第二个合并分支(branch-two)的根目录文件,丢弃第一个分支的对应文件,执行合并时添加-X theirs参数:
git merge -m "Integrating branch two into monorepo" existing-repo/branch-two-monorepo --allow-unrelated-histories -X theirs

说明:这种方法仅适用于根目录少量公共文件的冲突,若分支间存在大量路径重叠的文件冲突,仍推荐使用方法1,避免丢失内容或产生意外的文件覆盖。


内容的提问来源于stack exchange,提问作者Michael

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 21:13:14