[英]git fetch - "refuse", git pull "forced update, fetch updated current branch head". Local was 2 commits ahead of remote
添加:
fetch 问题是由于我不了解clone --mirror
工作原理,请参阅下面的回答。
原来的:
我确实搜索过。 强制更新后尝试阅读 Git pull , git 拒绝获取到当前分支, 如何恢复 Git 中丢失的提交? 但仍然无法理解我的情况。
目前在main
分支上的本地和远程(通过git status
)。 两个确认本地的git log
都领先远程 2 次提交。 为什么 git fetch 显然会尝试更新 HEAD?
git fetch
fatal: Refusing to fetch into current branch refs/heads/master of non-bare repository
fatal: The remote end hung up unexpectedly
git pull
确实强制更新和我最近的main
“丢失”提交。 从链接的帖子中,我读到做git reflog
and rest --hard
to last commit 并且我回到了原点。
目前我还面临另一个问题(因为最初看到本地是领先的我想推动)我刚刚发布名称匹配,但是:“你当前分支的上游分支与你当前分支的名称不匹配”,git pull写道“强制更新” :
git push
输出“你当前分支的上游分支与你当前分支的名称不匹配”。
回购怎么了? 为什么git pull
默认情况下强制更新而不询问? 为什么 git push
找不到远程分支?
添加:
我继续看到一些更有趣的东西,仍然不理解为什么 git 看不到main
分支的匹配,我做了git push origin HEAD:refs/remotes/origin/main
并看到推送成功:
Total x (delta y)
To remote_url
ref_of_last_remote_commit...ref_of_last_local_commit HEAD -> origin/head
但是:远程上的git reflog
没有输出那些新的提交!
在不知道你的问题的上下文(即你的 git 仓库的状态)的情况下,很难准确地理解哪里出了问题,但是你说“ git push
outputs '你当前分支的上游分支与你当前分支的名称不匹配’” 这可能是一个线索。
假设你的本地分支被命名为main
而你的远程存储库被命名为origin
(你可以通过git remote -v
验证这一点),常见的设置是你的本地分支main
应该跟踪远程分支origin/main
。 通过键入git branch -vv
检查。 如果它们不匹配,请尝试使用git push -u origin main
使您的远程分支名称与本地分支名称匹配。
或者,如果origin/main
已经存在,您可以尝试将本地分支重命名为某个唯一名称( git checkout -b <the_unique_name>
在本地提交所有内容后)并执行git push -u origin <the_unique_name>
。
我已经用git clone --mirror
做了那个 repo,现在在 @torek 的帮助下为什么在 git config 中使用“fetch”行会影响 `git branch --set-upstream-to` 的工作方式? 我知道这是结果/问题的根本原因,因为--mirror
在.git/config
中设置: fetch = +refs/*:refs/*
(我保留原样,但我已经更改了core.bare=false
) .
fetch
被拒绝,因为我要求它更新所有引用,包括当前分支。git pull
预计会用来自远程的 refs 更新所有本地 refs,因此forced update
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.