如何合并不存在共同祖先的两个Git分支?
Git无关历史分支合并方案
你遇到的问题核心是迁移到GitLab的过程中,master和feature分支的共同祖先提交丢失,Git默认只会合并共同祖先之后的新提交,所以迁移前master独有的提交无法被普通合并识别。
以下是可落地的操作方案:
方案1:允许无关历史合并(最推荐,保留完整提交历史)
操作步骤:
- 切换到本地
feature分支,拉取远端最新代码保证版本一致:git checkout feature && git pull origin feature - 拉取本地
master分支的最新代码:git pull origin master - 执行带允许无关历史参数的合并命令:
git merge master --allow-unrelated-histories - 手动解决所有冲突(包含迁移前
master独有提交对应的代码差异),提交后推送到GitLab远端即可。
优缺点:操作成本最低,完整保留所有提交历史;如果两个分支差异较大,冲突解决工作量会更高。
方案2:差异同步(适合不需要保留旧提交历史的场景)
如果不想把旧提交历史合并进feature分支,只需要同步代码内容,可以用两种方式:
- 如果你能找到Bitbucket时期
master独有提交的哈希范围,直接批量挑拣提交:git cherry-pick <最早旧提交哈希>^..<最晚旧提交哈希> - 如果找不到具体提交哈希,直接基于全量差异生成补丁同步:
- 生成两个分支的全量差异补丁:
git diff feature master > sync.patch - 将补丁应用到当前
feature分支:git apply sync.patch - 校验代码无误后正常提交推送即可。
- 生成两个分支的全量差异补丁:
注意事项
操作前务必先备份两个分支的最新代码,避免操作失误丢失GitLab上的新提交。
内容的提问来源于stack exchange,提问作者user 12054169
相关产品推荐
相关产品推荐

