git - `git pull` 失败,现有历史记录“无法快进”
问题描述
我已经阅读了很多关于主题错误消息的其他问题(“不可能快进”),但它们似乎都不适用于我的情况。我创建一个分支 ( git checkout -b issue-215
),进行更改并在本地提交。我推送更改,然后进行新更改和另一个本地提交:
* 4b797d2a - (HEAD -> issue-215)
* 180a7ab5 - (origin/issue-215)
* 863ef01a - (origin/master, origin/HEAD, master)
ETA:根据评论中的要求,输出git branch --all -v
:
* issue-215 4b797d2a [ahead 1]
... other branches ...
master 863ef01a
remotes/origin/issue-215 180a7ab5
...other remotes....
remotes/origin/HEAD -> origin/master
remotes/origin/master 863ef01a
没有新的远程更改,但 VSCode 想要在推送之前拉取。这就是我得到这个错误的地方。因此,为了进行故障排除,我git pull origin issue-215
手动运行,并获得以下输出:
$ git pull origin issue-215
From ssh://my.repo/project
* branch issue-215 -> FETCH_HEAD
fatal: Not possible to fast-forward, aborting.
请记住,服务器上没有新的更改,从我当前的本地提交回到远程分支的历史,回到master
and origin/master
,是一条直线。我不想合并或变基,我的本地代码已经是我应该拉的分支的直接子代。
这只是大约一个月前才开始发生的。以前,单击 VSCode 中的“同步”按钮会起作用,但从那以后它总是会失败并显示此错误消息。我可以进行某种导致这种行为的 gitconfig 更改吗?我的全局 gitconfig 文件中没有太多内容,并且至少有 2 个项目会发生这种情况,所以我认为这不是我对存储库所做的事情。
解决方案
这是 Git 2.33.1 版的一个已知问题。它应该在 2.33.2 中修复。 其他普遍有用的建议如下:
“不可能快进”消息意味着您将您的配置配置git pull
为使用git merge --ff-only
,也许使用git config pull.ff only
. 尽职git pull
尽责地运行:
git fetch origin issue-215
git merge --ff-only FETCH_HEAD
第二个命令给你错误并停止。(编辑:如果您自己手动执行此操作并且它有效,则您遇到了脚注 1 中的错误。)
请记住,服务器上没有新的更改,从我当前的本地提交返回到远程分支,返回到 master 和 origin/master 的历史是一条直线。
显然(从错误中),它不是. 1 提取后,运行:
git log --all --graph --decorate --oneline FETCH_HEAD
看看它不在哪里;为什么不是是一个不同的问题。我怀疑答案是这样的:
origin
是 GitHub;- 其他人正在使用REBASE AND MERGE或SQUASH AND MERGE按钮;
- 因此,您获得的提交
fetch
在逻辑上等同于您之前推送的提交,但具有不同的哈希 ID。
然后,常规合并或变基将起作用,但ff-only
不会。(这不是唯一可能的解释:例如,其他托管站点具有相同的效果,但有时具有不同的按钮标签。)
这只是大约一个月前才开始发生的。以前,单击 VSCode 中的“同步”按钮会起作用,但从那以后它总是会失败并显示此错误消息。我可以进行某种导致这种行为的 gitconfig 更改吗?
这可能是您更改的内容,例如设置pull.ff
为only
. 这可能是其他人更改的内容,例如从MERGEGitHub 切换到REBASE AND MERGE.
1 Git 2.33.1 中有一个错误,它pull.ff only
拒绝了它不应该有的无操作案例。如果你有 Git 2.33.1,要么升级它,要么在这种情况下使用git fetch
然后git merge --ff-only
。
推荐阅读
- java - 如果类中的对象为空/null,则 GSON 跳过类
- pandas - 在我自己的函数中使用 pandas df.rolling() 时遇到问题
- c# - 自定义 IOptions 映射路径
- python - django 电子邮件列表字段
- php - 保存为 JSON 的 Wordpress ACF 转发器
- jenkins-pipeline - 在声明性 Jenkinsfile 的列表中设置变量
- three.js - Three.js 纹理以小分辨率加载,放大后的同一张图片会破坏场景(小图约 600x600px,放大到约 1400px)
- python - 与 Python 3.7 的 Sharepoint 连接
- python - Ubuntu Open CV 视频捕获
- c++ - 从 protobuf 对象到通用树数据结构