我们有个 react-native-ad 的开源包,这个包本来是在我们公司内部使用维护的一个包,后来整理开源但是开源之后我这边有些提交就直接提交到了 Github 并没有 Push 回内部服务器,但是公司其他小伙伴的维护还是在内部服务器,于是导致了两个仓库同时维护的情况。今天璇哥找到我说干脆将两个仓库先合并一波,后续方便同步。

我们这个仓库之前其实是一个,只是后来直接这边 clone 一份之后将整理了一下然后提交到的 Github 。现在只是说有两个不同的远程链接和各种增加了部分提交而已,如果是那种直接 rm -rf .git 然后提交的项目的话我这边建议直接手动合并代码之后选择强制 Push 一边,保留一边先保证是用同一个 Git log 记录树。

首先我们这边有两个远程仓库,我这里就将其称为 code_project 和 open_project 区分吧。(一个 code_project 是我们内部服务器的远程仓库,一个 open_project 我们在 Github 上的远程仓库)

我们先选出一个远程做主项目,然后将另外一个合并进来,我这边就直接选择 code_project 了。

先拉取 code_project 的代码,并进入到 code_project 代码中

git clone git@code:module/code_project.git

cd code_project

将 open_project 的远程地址加入到 code_project 项目中,并将远程命名为 open

git remote add open git@github.com:haxibiao/open_project.git

获取 open_project 的远程代码在本地创建一个分支,它会自动命名为相应的分支名比如我这里会命名为 open/master

git fetch open

现在我们的位置是在之前的 code_project 的 master 分支上的,open/master 分支上现在已经有了 open_project 的最新代码和提交了,所以我们将 open/master 分支合并到 code_project 就 ok 了,如果出现冲突的话就手动解决一下冲突。

git merge open/master

处理完冲突之后,我们 Push 上去就好了。这里的 origin master 实际上就是 默认的 master 分支,也就是 code_project 的 master 分支。

git push origin master

到这里基本就结束了,不过我们现在还只是将代码提交到了 code_project ,那么我们还需要将合并完的代码提交到 open_project 呀。切换分支,合并,Push 就搞定了,因为在 code_project 已经解决过冲突的,所以这里的过程就会特别舒服,哈哈哈哈哈哈哈

git checkout open/master
# 切换到 open/master 分支,也就是 open_project 的 master 分支

git merge origin/master
# 将 origin/master 分支的代码合并过来,这里其实可以省略 origin 的,因为 git 默认会去找 origin,也就是 code_project 的 master 分支

git push open master
# 提交代码搞定

博客到这里就真的要结束啦,今天你对 Git 的使用又进一步了呢,嘿嘿