git库迁移出现fatal: refusing to merge unrelated histories

 

背景:

我们原来的代码库是这样的,git@git.a.com:a.work.git(简称a仓库)

代码总库work下分为两个文件夹,develop作为开发和测试库,release作为生产库。各自文件夹内区分不同项目,比如有三个项目分别aPro、bPro、cPro,目录结构如下:

- work

    -develop

        -aPro

        -bPro

        -cPro

    -release

        -aPro

        -bPro

        -cPro

需求:

现需要将a库中的aPro迁移至git@git.b.com:b.work.git(简称b仓库)

如果直接拷贝一份代码推送到b仓库,那么b仓库只有这一次推送的记录,之前的commit都没有保留,这肯定是我们不希望的。那么如何保留commit的进行git库迁移呢

操作:

使用git subtree split -P path/folder -b branchName

直接在要拆分的分支上执行该命令,会形成一个新的分支

  • 在a仓库的master分支新创建一个迁移aPro的分支

git checkout -b feature/aPro
  • 在这个新的分支执行git subtree split -P path/folder -b branchName
git subtree split -P develop/aPro -b feature/dev_aPro
  • 此时我们得到了feature/dev_aPro分支
  • 关联b仓库
git remote add newOrigin git@git.b.com:b.work.git
  • 查看是否关联成功,此时可以看到共有四条origin  两个a库的 两个b库的
git remote -v
  • 将 feature/dev_aPro推送到新库
git push newOrigin feature/dev_aPro:feature/dev_aPro

此时已经将aPro项目推送至b仓库了,并且保留了原来的commit

原a库的代码还有遗留或开发中:

假如时间顺序是这样的,a库中有一个分支正在改造aPro项目,而我开始迁移库的时候是从master新创建的分支做的迁移,这就导致b仓库中没有这个正在开发的分支的代码。

那么等到a库中进行中的分支执行完成,需要把落后的这一次提交也迁移到b仓库,做法和上边是一样的,还是在master新创建一个分支,将这个分支推送到b仓库的指定分支,此时这个新的分支去pull之前的那个分支,

会出现refusing to merge unrelated histories的错误。

此时需要使用

git pull origin master --allow-unrelated-histories

来强制将两个分支指向同一个源

执行完之后再去pull ,就可以处理冲突  然后提交代码了

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宋哈哈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值