Git没有共同祖先的两个分支如何合并?

何应清 发布于 2016/08/15 22:51
阅读 15K+
收藏 3

用导入项目的方式,导入了一个github上的自己的一个项目,现在要提交了,但本地的和github上的就没有共同祖先,无法提交了。

在svn的话,直接加url地址,就可以比较异同,然后提交,无所谓共同祖先问题,但目前的话,会提示“

fatal: refusing to merge unrelated histories”,就算allow-unrelated-histories,但这样的后果是项目的全部文件都当作这次提交的内容,而实际上这次提交的内容应该就是几个不同的文件而已。


简而言之就是:git如何实现svn那种,两个不同的项目,直接比较异同给出不一样的文件,方便我提交?

以下是问题补充:

@何应清:再简单点就是:我把github上自己的项目,通过zip导出来,然后修改后,怎样再关联回原来的项目? 修改的文件很零散,能否做到svn那样,写个url,自动同步、对比出项目中不同的文件,直接提交这些不同的文件? (2016/08/15 22:54)
加载中
1
angelsinklow
angelsinklow

本地目录下初始化Git仓库,commit本地代码,然后pull远程仓库的,会自动合并  出现冲突会提示,如果有冲突解决好然后push搞定

如果怕出现冲突或者需要自己手动合并 那就用fetch  拉取远端不合并  需要手工进行合并

1
angelsinklow
angelsinklow

引用来自“angelsinklow”的评论

本地目录下初始化Git仓库,commit本地代码,然后pull远程仓库的,会自动合并  出现冲突会提示,如果有冲突解决好然后push搞定

如果怕出现冲突或者需要自己手动合并 那就用fetch  拉取远端不合并  需要手工进行合并

引用来自“何应清”的评论

呃,因为他们并无相同的祖先,所以直接pull的话,会提示“fatal: refusing to merge unrelated histories”.


allow-unrelated-histories这种倒是可以,但是和强行提交没什么区别:全部文件都会提示冲突,这样就会把整个项目里的文件都当作新文件提交,而不像svn那样,无所谓是否有共同祖先,程序会帮自动识别改动过的,而不是改没改都当新的...
好吧,这是Git2.9的新特性,只能通过--allow-unrelated-histories来提交了
0
何应清
何应清

引用来自“angelsinklow”的评论

本地目录下初始化Git仓库,commit本地代码,然后pull远程仓库的,会自动合并  出现冲突会提示,如果有冲突解决好然后push搞定

如果怕出现冲突或者需要自己手动合并 那就用fetch  拉取远端不合并  需要手工进行合并

呃,因为他们并无相同的祖先,所以直接pull的话,会提示“fatal: refusing to merge unrelated histories”.


allow-unrelated-histories这种倒是可以,但是和强行提交没什么区别:全部文件都会提示冲突,这样就会把整个项目里的文件都当作新文件提交,而不像svn那样,无所谓是否有共同祖先,程序会帮自动识别改动过的,而不是改没改都当新的...
0
Feng_Yu
Feng_Yu
要么试试生成patch的形式手工合并?git支持patch格式
何应清
何应清
主要项目文件太多,也不知道为什么,没有共同祖先的,好像文件都被判定为新修改过的文件,要一个个合并修改,否则提交上去的话就会变成“更新整个项目”的commit。svn的diff起码还能准确判断哪些是确实改过的,这样就可以只提交修改的了,避免“更新整个项目”那种让人不知道具体修改了哪些文件的问题
0
反魂蝶五分
反魂蝶五分
兄弟,你现在解决了吗?我也是这种情况。
0
水岸上

首先确保有跟踪远端分支, 然后试试rebase中文衍合合并, 我现在出现这个问题, 然后发现没有跟踪远端分支, 然后跟踪后又不行, 然后试了下合并用衍合合并就能合并成相同的先祖了.然后再提交就OK了.希望能解决你的问题

0
蔡小路

土办法:把远程clone下来,然后删掉,add自己的代码 pull 合并...

0
DR_WHO
DR_WHO

git fetch --all //只是下载代码到本地,不进行合并操作

git reset --hard origin/master //把HEAD指向最新下载的版本

返回顶部
顶部