如何合并两个Git仓库的连续提交历史?A含2021年末前、B含2022年初后记录
合并两个Git仓库为连贯提交历史的操作方法
操作思路
你的两个仓库属于同一项目的前后阶段历史,repo A的最终状态就是repo B的初始状态,最佳方案是将repo B的提交变基到repo A的历史末尾,这样能得到完全线性、连贯的提交历史,既不会产生无意义的合并提交,也不会引入多余文件。
具体步骤
- 先确认本地的
repo A和repo B都处于干净状态(无未提交修改),可以用git status检查。 - 进入
repo A的本地目录,把repo B添加为远程仓库:git remote add repo-b /path/to/local/repo-b # 填本地路径或远程仓库URL都可 - 拉取
repo B的main分支到repo A本地:git fetch repo-b main - 切换到拉取的
repo B分支,执行变基操作,目标是repo A的main分支末尾:git checkout repo-b/main git rebase main注:如果变基时出现冲突,按Git提示解决冲突后,执行
git rebase --continue即可。由于两个仓库是连贯历史,冲突概率极低。 - 验证结果:
- 用
git log --oneline查看提交历史,确认是repo A的历史后直接衔接repo B的所有提交,无额外合并节点。 - 用
git diff main..HEAD对比变基后的分支与repo A的main分支,确认只有repo B中的更改,无多余文件。
- 用
- (可选)验证无误后,将变基后的分支合并到
repo A的main分支(此为快进合并,不会产生合并提交):git checkout main git merge repo-b/main - 最后可将合并后的
main分支推送到目标远程仓库(若需要)。
关于“旧文件”的疑问解答
变基只是将repo B的提交重放到repo A的历史末尾,而repo B的初始状态本身就是repo A的最终状态,所以repo B的提交只会包含2022年1月1日起的更改,不会引入repo A中已存在但repo B未修改的旧文件。如果repo B中删除了某些旧文件,变基后这些删除操作也会正确应用到历史中。
内容的提问来源于stack exchange,提问作者JF Meier
相关产品推荐
相关产品推荐

