如何在Git中找到最相似提交及分支共同祖先并导入外部分支?
找到Git仓库的共同祖先并合并外部分支
步骤1:添加外部仓库为远程
在第一个仓库的本地目录中,将第二个仓库添加为远程仓库,拉取其分支历史:
git remote add external-repo <第二个仓库的Git地址> git fetch external-repo
步骤2:定位共同祖先提交
由于第二个仓库是从第一个仓库的某个节点剥离(删除.git后重建),核心是找到两者文件快照匹配的提交:
- 获取第二个仓库
master分支根提交的树哈希(对应当时的文件系统快照):
复制输出的树哈希值(例如git ls-tree external-repo/master^{tree}a1b2c3d)。 - 在第一个仓库的
develop分支历史中,搜索拥有相同树哈希的提交:
输出结果中的第一个提交ID(例如git log develop --pretty=format:"%H %T" | grep <上述树哈希值>f4g5h6)就是两者的共同祖先。
如果找不到完全匹配的树哈希,说明剥离时文件有细微变更(如换行符、权限),可以通过
git diff --no-index对比两个仓库的初始文件,再结合git log develop --patch逐一排查最接近的历史提交。
步骤3:从共同祖先新建分支
基于找到的共同祖先提交,创建新的集成分支:
git checkout -b external-integration <共同祖先提交ID>
步骤4:合并外部仓库的master分支
将第二个仓库的master分支合并到新建的集成分支中(因历史无关联,需允许合并无关联历史):
git merge external-repo/master --allow-unrelated-histories
合并过程中处理可能的冲突,完成后即可将该集成分支合并到develop或按需使用。
内容的提问来源于stack exchange,提问作者DDS
相关产品推荐
相关产品推荐

