需求

  • 有2个 git 仓库:repo1、repo2;
  • 想将 repo1 中的文件移入 repo2;
  • repo1 的提交记录要保留;

实现

将 repo1 作为远程仓库,添加到 repo2 中,并设置别名为 other:

切换至 repo2 仓库,并执行以下命令:

1
git remote add other git@github.com:xxx.git

从 repo1 仓库中抓取数据到本仓库:

1
git fetch other

将 repo1 仓库抓取的 master 分支作为新分支 checkout 到本地,新分支名设定为 repo1

1
2
git checkout -b repo1 other/master

切换至 repo2 的 master 分支

1
git checkout master

将 repo1 合并入 master 分支

1
git merge repo1

这里会报错 fatal: refusing to merge unrelated histories,这个问题是因为两个根本不相干的 git 库, 一个是本地库,一个是远端库,然后本地要去推送到远端,远端觉得这个本地库跟自己不相干,所以告知无法合并;需要加上 –allow-unrelated-histories 把两段不相干的分支进行强行合并;

1
git merge repo1 --allow-unrelated-histories

大功告成~

总结

  • 大致思路是伪造远程的 repo1 仓库为 repo2 的一个分支,然后合并进来;
  • 若是文件有冲突、或要建立子目录,建议在 repo1 中先解决,再进行如上操作;