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

如何合并两个同源但独立的Git仓库?

合并两个独立但高度相似的Git仓库

核心思路

因为两个仓库源自同一初始副本,我们需要先为它们建立共同的历史起点,之后就能像管理同一仓库的不同分支一样,轻松共享改动、合并变更。

具体步骤

1. 定位共同源头提交

找到B仓库当初从A复制时,A仓库对应的那个历史提交(记为A-base-commit)。如果记不清具体提交哈希,可通过对比两个仓库初始文件的快照,在A仓库中找到与B初始状态最匹配的提交。

2. 重定向B仓库的提交历史

把B仓库的所有提交,重新挂到A-base-commit下面,让两个仓库拥有共同祖先:

  • 打开本地B仓库的终端,添加A仓库为远程源:
    git remote add a-origin <A仓库的本地路径或远程URL>
    git fetch a-origin
    
  • 找到B仓库的第一个初始提交(记为B-first-commit),执行变基:
    git rebase --onto a-origin/main^ B-first-commit^
    
    这里a-origin/main是A仓库对应A-base-commit所在的分支,B-first-commit^表示从B的初始提交开始重定向历史。变基中遇到冲突时,手动解决后用git add .和git rebase --continue推进。

3. 合并到同一仓库统一管理

  • 切换到本地A仓库的终端,添加处理后的B仓库为远程源:
    git remote add processed-b <处理完成的B仓库本地路径>
    git fetch processed-b
    
  • 创建分支B来承载B仓库的历史:
    git checkout -b branch-B processed-b/main
    
  • 现在branch-A(原A分支)和branch-B有了共同祖先,后续操作就和普通分支一样:
    • 公共部分的改动,用git cherry-pick把单个提交复制到另一个分支;
    • 改动不大的模块,直接执行git merge branch-B(或反向),解决冲突即可完成合并。

备选方案(适合部分目录完全独立的场景)

如果两个仓库存在完全独立的目录,可考虑用git subtree或git submodule分别管理,但如果大部分文件重叠,优先用上述变基方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 11:02:39