git push报错"fatal: refusing

2018-07-10  本文已影响35人  MemoryReload

剧情:

就在刚刚,我新建了一个项目编写完代码,然后提交到GitHub仓库,一切正常。
然后,我突然记起来,我有个地方需要做一个小的修改,于是我修改了代码之后使用了git commit --amend命令,对本地仓库的commit做了修改,没有生成新的commit。然后,我git status查看仓库状态,发现远程仓库有一个commit需要pull同步,于是,我自信的进行远程同步:git pull origin master,悲剧发生了,git报错,合并失败:fatal: refusing to merge unrelated histories
开始我感觉应该是自动合并的问题,于是我进行手动合并:

git fetch origin
git merge remotes/origin/master

然后,悲剧持续,git报错,合并失败:fatal: refusing to merge unrelated histories

解决:

后通过查阅资料,大神指出用--allow-unrelated-histories选项,可以合并两个不同的仓库。可以直接自动合并:git pull origin master --allow-unrelated-histories,也可手动fetch 之后,使用merge --allow-unrelated-histories。我已经手动fetch过了,于是我手动git merge --allow-unrelated-histories remotes/origin/master,合并终于可以进行了,然后解决了conflicts,提交新的合并的commit,然后git push origin master。问题平息了。

思考:

我唯一不解的是为什么我的远程仓库会被git判定有unrelated histories。
于是,我git log --graph查看了下commit图,如下:


问题似乎很明显了。本地仓库的初次提交(first commit!)在git commit --amend 之后hash变化了!这就导致了,git判定远程仓库和本地存在不相关的记录(unrelated histories)。原因简单,出现问题的情况也比较特殊,但是,从这个问题让我对git commit --amend 命令有了新的认识,它虽然不会生成新的commit,但是,hash会改变,这可能带来一些奇怪的问题,就比如我遇到的,如果是修改首次提交,就会判定远程仓库和本地存在不相关的记录,而无法正常的同步。
上一篇下一篇

猜你喜欢

热点阅读