git之两个仓库的合并操作

​ 有这样的一种场景,某个项目一直是在本地提交代码,有一天PM找到你说,所有的代码现在需要提交到远程仓库,进行统一的管理。于是我们就需要把一个已经提交N多次的本地仓库转移到一个新建立的远程仓库,并且所有提交历史还应该原封不动的被保存下来,以备今后进行问题追溯。下面记录处理方法。

操作步骤

​ 1. 假设本地仓库是project-a,新建立的远程仓库是project-b,首先将远程仓库project-b拖到本地,然后进入到project-b仓库的目录中:

git clone https://gitxxx.com/yourremoterepos/project-b.git
cd path/to/project-b

​ 2. 将project-a当作project-b的一个远程仓库,然后通过git remote add命令将’远程仓库‘project-a添加到project-b中:

git remote add project-a path/to/project-a

​ 3. 添加了远程仓库后,就可以通过git fetch <远程主机名>命令来对远程仓库进行操作,接下来我们当然是将project-a的所有分支都取下来:

git fetch project-a

​ 通过git branch -a看到仓库下的所有分支情况,如下project-a的所有分支(该例子只有一个master分支)都被列出:

* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master
  remotes/project-a/master

​ 4. 将project-a的主分支merge到project-b,当然不一定merge主分支,指定任意想merge的分支即可:

git merge --allow-unrelated-histories project-a/master

​ 5. 此时git branch -a可以看到project-a还在该仓库中,但我们已经不需要它了,git remote remove删除之:

git remote remove project-a

​ 接下来都是常规操作了,如果有远程分支,将project-b的本地更新提交到远程即可git push orgin master。另:Webstorm集成了非常优秀的git可视化工具,可以直观的看到各个分支的情况,以下即表示了一个只有Initial commit的远程分支test如果将具有两次提交(ff和gitignore)的test_temp分支合并的过程:

[图片上传失败...(image-f2046-1532160206505)]

总结

​ 合并两个仓库的根本原理是用到了git remote指令,将待merge的仓库project-b当作一个远程仓库去处理即可。

参考

stackoverflow: How do you merge two Git repositories?

推荐阅读更多精彩内容