美文网首页
git push报错"fatal: refusing

git push报错"fatal: refusing

作者: MemoryReload | 来源:发表于2018-07-10 01:10 被阅读35次

    剧情:

    就在刚刚,我新建了一个项目编写完代码,然后提交到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会改变,这可能带来一些奇怪的问题,就比如我遇到的,如果是修改首次提交,就会判定远程仓库和本地存在不相关的记录,而无法正常的同步。

    相关文章

      网友评论

          本文标题:git push报错"fatal: refusing

          本文链接:https://www.haomeiwen.com/subject/ramxpftx.html