Reset --hard origin/master 没有把我带到 origin/master~HEAD?

Reset --hard origin/master not bringing me to origin/master~HEAD?

我在 master 分支上,没有本地更改。

git remote -v 列出了获取和推送的正确 URL。

git branch -avv(在 git fetch 之后)显示 remote/origin/master 处于旧的过时提交状态,实际上 是如果你查看 GitHub 上的回购协议。
git reset --hard origin/master 让我进入那个过时的提交。
git diff --name-only origin/master 然后干净利落。

此时,当我手动检查文件资源管理器中的文件时,它们确实非常落后......处于几个月前的状态。 origin/master 在 GitHub.

上的位置根本不是最新的

git pull --rebase 将我带到 real 最新提交,这是 origin/master actually 所在的位置,如果我在 GitHub 上查看它,但随后 git diff --name-only origin/master 显示每个文件都已更改,因为它似乎正在与旧的过时提交进行比较。

所以很困惑。

git fetch 不起作用的原因是缺少 remote.origin.fetch 下的 fetch 设置。 (怎么会变成这样,我也不知道。)

当您 运行 git fetch 时,您的 git 联系他们的 git(GitHub,在这种情况下)并要求提供所有参考资料的列表(分支、标签等——您可以通过 运行ning git ls-remote origin 查看可用的内容)。然后,根据结果列表,您的 git 复制由 fetch 设置列出的引用。

由于您的 fetch 设置为空,您的 git 匹配零个引用,并复制所有零(即不复制任何内容)然后退出,留下 origin/master不变。

pull 脚本使用 fetchFETCH_HEAD 中留下的痕迹,因此能够变基。)

要修复它,请恢复默认 fetch 设置,例如:

git config --add remote.origin.fetch '+refs/heads/*:refs/remotes/origin/*'

(这里的拼写很重要,所以我希望我没有打错任何字)。或者,您可以改为删除并重新添加 origin,如 .