当前位置:   article > 正文

【Git】[rejected] git pull non-fast-forward,git push behind 问题解决 [图文解说]_git pull rejected non-fast-forward

git pull rejected non-fast-forward

(Git)git pull non-fast-forward问题解决 [图文解说]

问题描述

在这里插入图片描述

以前遇到git push orgin 出现 non-fast-forward,然后pull 拉取再合并,推送就可以了,但是这次竟然遇到了 pull non-fast-forward ! 这是什么鬼,没见过啊,然后就搜了一些别人的解决方案,但是没有解决,于是从自己的提交记录开始想,好像是因为上一次提交push后,又 git commit --amend 操作了好几次,然后提交了一次,就是现在这次了。其实就是一次简单的偏离提交历史啦~

分析问题产生原因

目前分支的情况如图:
在这里插入图片描述
在C2推送到远程后,C2进行了多次的git commit --amend操作,该操作每次都会创建一个新的节点,所以hash值早就不是C2了,到这里是C2’‘’。当前我所在的节点是C3’,上一个节点是C2’‘’,然而在远程分支上,它还跟踪的是C2,上一个节点是C1,因为分不清C1和C2’‘‘的关系(本地分支和远程分支的上一个节点),所以认为当前分支是在C2之前,也就是本地分支当前位置和远程分支的C2失去了任何联系。git push 的错误提示如下:
push时的错误提示
使用 git pull 的错误提示如下:
在这里插入图片描述
当前分支不知道应该拉取接到哪里,所以拉取失败了。C3’上一个分支是C2’’',在远程仓库里C2的上一个分支是C1,现在要拉取C2,自然不知道该放到哪里。


解决办法

1.回退到上一次提交的位置

以我当前最后一次提交位置是C3’举例
git checkout -b temp 创建临时分支,标记最新的节点,作为“站岗”
git checkout main 切换回main分支
git checkout HEAD^ 使main分支回到C2’''节点
在这里插入图片描述

2.拉取远程分支与本地分支合并

git pull origin 拉取远程分支合并,解决冲突

在这里插入图片描述

git push origin 将合并结果推送过去
在这里插入图片描述

3.将最新的本地分支和合并后的分支合并,再推送

git rebase main tmp 将C3’和C4合并,将本地最新节点C3’变基到C4上
在这里插入图片描述
git checkout main
git rebase tmp 将main分支更新到最新
在这里插入图片描述
git push 将最新的main分支提交(本地分支上最新的代码)
在这里插入图片描述
这样就解决了"偏离分支问题"
这也是Learn Git Branching 的 远程-第7关

学习推荐: githug, Learn Git Branching
参考: git动画学习网站:https://learngitbranching.js.org/?locale=zh_CN

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/966862
推荐阅读
相关标签
  

闽ICP备14008679号