如何从同一仓库的两个分歧分支创建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直接导入分支内容(零冲突)
这种方法无需执行合并操作,直接将两个分支的内容分别导入新仓库的目标路径,同时完整保留原分支的提交历史,完全规避冲突:
- 创建并初始化新仓库:
mkdir new-monorepo && cd new-monorepo git init
- 添加原仓库为远程源并拉取所有分支:
git remote add existing-repo <原仓库的URL地址> git fetch existing-repo
- 将
branch-one的内容导入到git/branch-one路径:
git read-tree --prefix=git/branch-one/ existing-repo/branch-one git commit -m "导入branch-one到git/branch-one目录"
- 将
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
相关产品推荐
相关产品推荐

