场景: 最近因为要做一个对外的系统,需要我重新建一个仓库,从0开始去开一个项目,我只有单独建立私有仓库的权限A,而没有web组底下建立仓库B的权限,因为下班了,所以我打算先建,加班把东西先弄好,在仓库A去记录我得提交,后面再把A的代码以及对应的commit移到B.
假设我刚开始提交代码的仓库地址为A: ssh://git@git.xxxxxxAxxxxxx.git
, 而我要迁移到仓库地址B:
ssh://git@git.xxxxxxBxxxxxx.git
, 先保证代码已经提交到了A仓库
1. 下载需要进行合并的仓库B
git clone ssh://git@git.xxxxxxBxxxxxx.git
2. 添加需要被合并的远程仓库 A
git remote add tempA ssh://git@git.xxxxxxAxxxxx.git
将 tempA 作为远程仓库,添加到 本地仓库(origin)中,设置别名为 tempA(自定义,为了方便与本地仓库origin作区分)
将远程仓库唯一的URL
<url>
映射成为 在本地仓库中对远程仓库起的别名<shortname>
。(注意:git remote add <shortname> <url>
只负责映射!它不会产生下载或上传的流量!只有git clone
,git fetch
,git pull
等才产生下载或上传的流量!)
平时我们git clone xxx ,但是我们后面都是直接git push origin 分支就推到远程了,是因为origin这是 Git 给你克隆的仓库服务器的默认名字,可以通过git remote
查看
3. 把base远程仓库(A)中数据抓取到本仓库(B)
git fetch tempA
git fetch 命令用于从远程获取代码库
4. 基于base仓库的当前分支(一般是你拉取代码得默认分支,master/main, git branch -a看一下),新建一个分支,并切换到该分支,命名为 "githubB"
git checkout -b githubB tempA/master
此时我们的仓库B就有了一个基于仓库A内容的分支 "githubB",后续我们将 "githubB" 分支代码合并到master就可以了。
此时使用 git branch
查看所有分支
5. 我们切换到需要合并的分支 master
git checkout master
第 4 步我们创建了即将被合并分支 "githubB" ,默认是在当前分支上的,所以我们需要切换回我们的目标分支
6. 合并
git merge githubB --allow-unrelated-histories
合并过程中可能会遇到各种冲突,如果有冲突解决就可以了
7. 提交
git push origin master
以上,已经全部完成!!!
但是,如果你在原有得gitlab里面用别人新建得仓库,并且想做提交得操作,可能需要重新更新一下密钥,我当时就是仓库A得代码能跑,但是仓库b得没法提交,把旧得密钥删了,重新建立一个新的就好
参考这个大大得文章: Git-合并两个不同的仓库