我正在使用 Git 与其他用户协作,但是今天我无法使用“
git pull
”获取某些文件的最新更改,并且无法看到“git log
”中的更改。
可能是什么问题?
对我有用的是,
.git
文件夹.git
git checkout
删除之前,您可以尝试
git fetch --all
git reset --hard origin/master
您需要将
master
替换为适当的分支,现在默认为 main
。
什么对我有用,
git reset --hard origin/master
它向我展示了一些文件名太长,以至于 git 无法从我的存储库中提取它们,因此导致了不匹配和不正确的构建。
所以我按照以下步骤进行修复并再次进行了硬重置。
git config --system core.longpaths true
幸好它成功了。
就我而言,问题是我的
index.lock
文件夹中有一个 .git
文件。我删除了它,然后拉工作了。
检查您当前的分支。
git status
git branch
如果您不在分支中,则处于 分离 HEAD 模式并且
git pull
不会合并任何内容。
git log --all --branches
git log
将有助于确保您查看获取的分支(即远程跟踪分支)上是否有任何新提交。您可能有未完成的合并,从而阻止了拉取。检查您是否有正在进行的提交。
它对我有用:
而不是
$ git pull
使用
$ git pull [remote] [local-branch>
我只是想添加另一种可能发生这种情况的情况。我使用的是稀疏结帐。由于某种原因,我的工作树中有一个目录,我认为它包含在稀疏结账中(我认为它列在
.git/info/sparse-checkout
中),但事实并非如此(由于某种原因,我现在忘记了它从 .git/info/sparse-checkout
中删除了) .)所以它只是被 pull
或 checkout
或 reset
或任何其他命令忽略。这非常令人困惑,直到我开始在新的克隆中复制稀疏结帐配置并意识到错误。
只有当您使用稀疏结帐时,这种情况才会发生。如果您不使用稀疏结帐,则不会发生这种情况。 (检查 git config 以查看是否启用了稀疏检查,并检查 .git/info/sparse-checkout 是否存在,但您会知道您是否正在这样做,因为我认为无论如何它都必须由用户手动设置。 )(如果你好奇它是什么,请谷歌它 - 它只是一个简单的机制,用于从结帐中省略文件和目录,否则这些文件和目录将被跟踪/拉取/获取等。)
我的企业 Gitlab 存储库最近从 HTTPS 更改为 SSH,也遇到了同样的问题。由于我的存储库仍然使用 HTTPS,任何
git pull
都会被默默地忽略。
将origin更改为SSH后,一切又顺利了。
git remote set-url origin [email protected]:username/repo.git
(要获取 SSH URL,只需单击 Gitlab/Github Web 界面中的“克隆”按钮,然后选择“使用 SSH 克隆”)
有 2 种可能的情况:
1. 如果您有 Bitbucket、gitlab 等帐户。
您可能需要先同步您的 fork 目录,然后在本地分支上执行 git pull。基本上,您必须重新设置您的 fork 副本以与远程主服务器同步并在本地副本中执行 git pull。
2. 只需尝试将本地工作副本变基以与远程主控同步。
git重置--hard origin/master
对我有用,但你必须进入文件夹,然后不仅在父文件夹上使用此命令。
对我来说,这是我在本地做出的承诺。 这些提交修改了我想要拉取的内容。 所以 git pull 无法从源获取文件
对我来说 FETCH_HEAD 文件没有所有分支,因为我的最新分支没有被跟踪 所以我:
强制删除分支(从该分支外部)
git branch -D <branch_name>
从给定分支创建新分支
git fetch origin <remote_branch>:<local_branch>
使远程分支成为跟踪分支
git push --set-upstream origin <branch_name>
然后用
git fetch
进行测试,我注意到我的 FETCH_HEAD 文件现在已正确更新。
就我而言,FETCH_HEAD 不知何故被破坏了。
当我使用
git branch -avv
检查它时,我的分支正在跟踪错误的提交。即使使用几个月前的提交。
我用
git reset --hard [commit hash]
解决了这个问题