refusing to merge unrelated histories

合并起源不同的git分支(合并两个git仓库)

关键命令

1
git pull origin master --allow-unrelated-histories

1
git merge [branch] --allow-unrelated-histories

背景: 我和好友分别维护着一份PAT题解相关的repository, 区别是她使用的是JS代码,我使用的是Java(偶尔会用C/C++、python等)(PS:欢迎使用各种语言的各路大佬加入我们的repo)。后来我们一拍即合,决定合成一个repository。

pat
想法是这样的,我fork她的repository,commit & push我的代码后,再发起pull request交由她处理,并合入她的repository的主分支。那么问题来了,我确实可以复制粘贴我的代码,然后提交后发起pull request。但是这样做的话,我之前的commit记录都会消失。我更希望能够保留我的commit记录

fork

1 导入旧仓库的git记录

一般情况下只需要像上图描述的步骤进行就行了。如果要保留旧仓库的commit记录,那就需要在2、3两步之间多加一些步骤。

1.1 将源地址设置为旧仓库的地址

git remote set-url origin https://github.com/relish-wang/PAT.git

1.2 拉取代码,解决冲突并合并

直接git pull的话,会出现这样的错误:拒绝合并无关的历史记录。这是为什么呢?因为一般来说一个git仓库的起源肯定是一个点。而这次合并会产生两个起源点(一个是我的旧仓库的master的起源点,另一个是她的旧仓库的master分支的起源点)。
merge
这就用到了下面这个命令: 允许合并无关的历史记录

git pull origin master –allow-unrelated-histories

合并后的git记录树:
gitmerge

然后就可以发起pull request了。

newflow

2 用Intellij IDEA打开项目,并运行Java文件

上述步骤完成后,意外地发现IDEA无法识别这个项目里的java文件了。
red
而能运行的java文件长这样:
green

2.1 修改项目配置

使用快捷键Command+;打开。下图是正确的配置。
javaconfig
修改后发现,仍未解决问题。

2.2 修改moudle配置

安装下面如图所示的步骤操作后,就完成了!

step1
step2
step3
step4

3 最后说几句

欢迎使用各种语言的各路大佬加入我们的repo。项目地址:http://github.com/taryn2016/coding

坚持原创技术分享,您的支持将鼓励我继续创作!
显示 Gitment 评论