有这样的一种场景,某个项目一直是在本地提交代码,有一天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?
网友评论