使用git 1.6.4.2时,当我尝试git pull时,会出现以下错误:
error: unable to resolve reference refs/remotes/origin/LT558-optimize-sql: No such file or directory
From git+ssh://remoteserver/~/misk5
! [new branch] LT558-optimize-sql -> origin/LT558-optimize-sql (unable to update local ref)
error: unable to resolve reference refs/remotes/origin/split-css: No such file or directory
! [new branch] split-css -> origin/split-css (unable to update local ref)
我尝试过git远程梅干起源,但没用。
尝试使用以下方法清理本地存储库:
$ git gc --prune=now
$ git remote prune origin
man git gc(1):
git-gc - Cleanup unnecessary files and optimize the local repository
git gc [--aggressive] [--auto] [--quiet] [--prune=<date> | --no-prune]
Runs a number of housekeeping tasks within the current repository, such as compressing file revisions
(to reduce disk space and increase performance) and removing unreachable objects which may have been
created from prior invocations of git add.
Users are encouraged to run this task on a regular basis within each repository to maintain good disk
space utilization and good operating performance.
man git远程(1):
git-remote - manage set of tracked repositories
git remote prune [-n | --dry-run] <name>
Deletes all stale remote-tracking branches under <name>. These stale branches have already been
removed from the remote repository referenced by <name>, but are still locally available in
"remotes/<name>".
git fetch--prune为我修复了这个错误:
[marc.zych@marc-desktop] - [~/code/driving] - [Wed May 10, 02:58:25]
[I]> git fetch
error: cannot lock ref 'refs/remotes/origin/user/janek/integration/20170505': 'refs/remotes/origin/user/janek/integration' exists; cannot create 'refs/remotes/origin/user/janek/integration/20170505'
From github.com:zooxco/driving
! [new branch] user/janek/integration/20170505 -> origin/user/janek/integration/20170505 (unable to update local ref)
From github.com:zooxco/driving
[marc.zych@marc-desktop] - [~/code/driving] - [Wed May 10, 02:58:30]
[I]> git fetch --prune
- [deleted] (none) -> origin/user/janek/integration
不过,这假设有问题的分支已在远程删除。
您也可以将其添加到~/.gitconfig中,以在运行git fetch时自动修剪:
[fetch]
prune = true
写下可能导致此问题的具体案例。
有一天,我推送了一个名为“feature/subfeature”的分支,同时在远程拥有“feature”分支。
该操作在我这边运行良好,没有任何错误,但当我的同事提取和/或提取任何分支时,他们都收到了完全相同的错误消息:无法更新本地ref,无法锁定ref的refs/remotes/origin/feature/subfeature。
这是通过删除remote上的功能分支(git push--delete origin功能),然后在我同事的repo上运行git remote prune origin来解决的,这会生成包含*[pruned]origin/feature的消息。
所以,我猜git fetch试图在git内部(.git/…)的功能文件夹中创建子功能引用,但创建文件夹失败,因为已经有了功能引用。
错误:无法锁定ref”仅仅意味着/refs中的信息已损坏,Git无法继续创建index.lock文件。
快速修复:删除并重新添加远程。
1-复制现有远程设备的SSH git URL。您可以使用以下命令将其打印到终端:
git远程-v
2-从本地git repo中删除远程设备:
git远程rm源
3-将远程设备添加回本地存储库:
git远程添加原点git@server-address.org:您的用户名/rep-name.git
4-修剪远程原点在线论坛的用户报告说,下面的命令对他们有效:
git远程修剪原点
5-清理和优化本地存储库git-gc--prune=现在
您可以在本文中找到更多信息:https://linuxpip.org/git-error-cannot-lock-ref/
由Google Drive desktop.ini文件引起时
用于Windows的Google Drive客户端在每个文件夹中创建desktop.ini文件。如果您的git存储库位于正在与Google Drive同步的目录中,则desktop.ini文件将导致git存储失败,出现以下情况:
cannot lock ref 'refs/remotes/origin/desktop.ini': unable to resolve reference 'refs/remotes/origin/desktop.ini': reference broken
要解决此错误,您可能需要删除git存储库中的desktop.ini文件。
如果安装了WSL,则可以使用以下命令删除desktop.ini文件:
注:⚠️ 此命令将删除<project_directory>中所有.git目录中的所有desktop.ini文件。
find <project_directory> -type d -name .git -print0 | xargs -0 -I {} find {} -type f -name desktop.ini -print0 | xargs -0 -I {} rm -vf {}
如果只想删除特定.git目录中的desktop.ini文件,则可以使用以下命令:
find <.git_directory> -type f -name desktop.ini -print0 | xargs -0 -I {} rm -vf {}