繁体   English   中英

git fetch - “拒绝”,git pull “强制更新,获取更新的当前分支头”。 本地比远程提前 2 次提交

[英]git fetch - "refuse", git pull "forced update, fetch updated current branch head". Local was 2 commits ahead of remote

添加:

fetch 问题是由于我不了解clone --mirror工作原理,请参阅下面的回答。

原来的:

我确实搜索过。 强制更新后尝试阅读 Git pullgit 拒绝获取到当前分支如何恢复 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 ) .

  1. fetch被拒绝,因为我要求它更新所有引用,包括当前分支。
  2. 为镜像设置 fetch 后, git pull预计会用来自远程的 refs 更新所有本地 refs,因此forced update

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM