如何将Git仓库合并到另一仓库并保留对应分支的提交历史?
该需求完全可以实现,通过Git原生的远程仓库关联与无关历史合并功能即可完成,全程保留两个仓库的完整提交记录,合并后分支切换逻辑与原有使用习惯完全一致。
操作步骤
1. 预处理本地repo1
先进入本地repo1的工作目录,同步远程最新代码,避免本地版本落后产生额外冲突:
# 切换到master分支并拉取最新代码 git checkout master git pull origin master # 切换到release分支并拉取最新代码 git checkout release git pull origin release
2. 关联repo2为repo1的远程源
将repo2添加为repo1的临时远程仓库,repo2地址可以是远程SSH/HTTPS地址,也可以是本地repo2的文件夹绝对路径:
git remote add repo2 <repo2地址> # 执行以下命令验证关联成功,能看到repo2的fetch和push地址即可 git remote -v
3. 拉取repo2的所有分支数据
仅拉取repo2的提交记录,不会修改当前repo1的工作区内容,属于安全操作:
git fetch repo2
4. 合并repo2的master分支到repo1的master分支
# 切换到repo1的master分支 git checkout master # 合并不相关仓库的master分支,Git 2.9及以上版本需要加--allow-unrelated-histories参数 git merge repo2/master --allow-unrelated-histories
如果两个仓库存在同名且内容冲突的文件,手动修改冲突文件后执行git add <冲突文件>,再执行git commit完成合并即可;无冲突则会自动生成合并提交。
5. 合并repo2的release分支到repo1的release分支
逻辑与合并master分支完全一致:
# 切换到repo1的release分支 git checkout release # 合并repo2的release分支 git merge repo2/release --allow-unrelated-histories
同样处理完冲突后提交即可。
6. 效果验证
分别执行git checkout master和git checkout release切换分支,工作区会自动加载对应分支合并后的所有文件,同时包含原repo1和repo2同分支的全部内容;执行git log即可查看两个仓库的完整提交历史。
确认无误后可执行以下命令推送到repo1的远程仓库:
git push origin master git push origin release
注意事项
- 合并前建议先备份两个仓库的完整副本,避免误操作导致数据丢失
- 如果不希望两个仓库的根目录文件混在一起,可以先在repo2的对应分支中将所有文件移动到自定义子目录,提交后再执行合并操作
- 完成所有合并操作后,可执行
git remote remove repo2删除临时添加的repo2远程源
内容的提问来源于stack exchange,提问作者Maurizio Reginelli
相关产品推荐
相关产品推荐

