需求:
- 有2个 git 仓库:repo1、repo2;
- 想将 repo1 中的文件移入 repo2;
- repo1 的提交记录要保留;
实现:
- 将 repo1 作为远程仓库,添加到 repo2 中,并设置别名为 other:
切换至 repo2 仓库,并执行以下命令:
git remote add other git@github.com:xxx.git
- 从 repo1 仓库中抓取数据到本仓库:
git fetch other
- 将 repo1 仓库抓取的 master 分支作为新分支 checkout 到本地,新分支名设定为 repo1
git checkout -b repo1 other/master
- 切换至 repo2 的 master 分支
git checkout master
- 将 repo1 合并入 master 分支
git merge repo1
这里会报错 fatal: refusing to merge unrelated histories
,这个问题是因为两个根本不相干的 git 库, 一个是本地库,一个是远端库,然后本地要去推送到远端,远端觉得这个本地库跟自己不相干,所以告知无法合并;需要加上 --allow-unrelated-histories
把两段不相干的分支进行强行合并;
git merge repo1 --allow-unrelated-histories
大功告成~
总结:
- 大致思路是伪造远程的 repo1 仓库为 repo2 的一个分支,然后合并进来;
- 若是文件有冲突、或要建立子目录,建议在 repo1 中先解决,再进行如上操作;