将拥有共同提交历史的两个Git仓库合并为含两个分支的仓库
合并同历史但独立新增提交的Git仓库
场景说明
我们有两个仓库./dirA和./dirB,二者共享从初始提交A到最后共同提交B的完整历史,之后各自独立新增了提交:
dirA的提交链:A → ... → B → C → DdirB的提交链:A → ... → B → E → F
需要将它们合并到./combined仓库,要求保留所有共同提交的完整历史(包括提交日期),同时把分歧后的提交分别放在两个独立分支中,最终结构如下:
./combined * D <dirA> * F <dirB> | | * C * E: new commit \ / \ / \ / V * B: last common commit | ... | * A: initial commit
具体操作步骤
1. 创建并初始化合并仓库
mkdir combined && cd combined git init
2. 导入第一个仓库的提交并创建分支
# 添加dirA为远程仓库 git remote add dirA ../dirA # 拉取dirA的所有提交 git fetch dirA # 基于dirA的主分支(比如main)创建本地分支dirA-main git checkout -b dirA-main dirA/main
3. 导入第二个仓库的提交并创建分支
# 添加dirB为远程仓库 git remote add dirB ../dirB # 拉取dirB的所有提交 git fetch dirB # 获取两个仓库的最后共同提交哈希值 COMMON_COMMIT=$(git merge-base dirA/main dirB/main) # 切换到共同提交位置 git checkout $COMMON_COMMIT # 基于dirB的主分支创建本地分支dirB-main git checkout -b dirB-main dirB/main
4. 设置默认主分支(可选)
如果需要将共同提交作为默认主分支的起点:
git checkout $COMMON_COMMIT # 将当前分支重命名为main(或你习惯的默认分支名) git branch -m main
验证合并结果
执行以下命令查看仓库提交结构:
git log --graph --oneline --all
你会看到dirA-main和dirB-main分别保留了各自的分歧提交,共同历史完整无改动。
内容的提问来源于stack exchange,提问作者sidyll
相关产品推荐
相关产品推荐

