赞
踩
以前遇到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
的错误提示如下:
使用 git pull
的错误提示如下:
当前分支不知道应该拉取接到哪里,所以拉取失败了。C3’上一个分支是C2’’',在远程仓库里C2的上一个分支是C1,现在要拉取C2,自然不知道该放到哪里。
以我当前最后一次提交位置是C3’举例
git checkout -b temp
创建临时分支,标记最新的节点,作为“站岗”
git checkout main
切换回main分支
git checkout HEAD^
使main分支回到C2’''节点
git pull origin
拉取远程分支合并,解决冲突
git push origin
将合并结果推送过去
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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。