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

将拥有共同提交历史的两个Git仓库合并为含两个分支的仓库

合并同历史但独立新增提交的Git仓库

场景说明

我们有两个仓库./dirA和./dirB,二者共享从初始提交A到最后共同提交B的完整历史,之后各自独立新增了提交:

  • dirA的提交链:A → ... → B → C → D
  • dirB的提交链: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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 06:35:16