从远程git存储库克隆后(在bettercodes) 我做了一些改变,承诺 并试图推动:

git push origin master

错误:

错误:不能锁定现有的信息/引用 致命:git-http-push失败

本案例涉及已经存在的存储库。

我之前做的是:

Git配置-global http。sslVerify假 git init Git远程添加[url] git克隆 更改数据 git提交

在'bettercodes'我没有访问git日志。

我用的是Windows。 具体的错误是:

C:\MyWorkStuff\Projects\Ruby\MyProject\>git push origin master
Unable to create branch path https://user:password@git.bettercodes.org/myproject/info/
error: cannot lock existing info/refs
fatal: git-http-push failed

我之前克隆过,然后修改代码并提交。


当前回答

在拉之前,你需要清理你的局部变化。下面的命令帮助我解决。

git remote prune origin

之后

git pull origin develop

希望这能有所帮助!

其他回答

这听起来像是一个权限问题——有没有可能你打开了两个窗口,使用不同的权限执行?也许可以检查.git文件夹的所有权。

也许检查是否有未完成的文件锁打开,也许使用lsof检查,或者对您的操作系统使用相同的方法。

这个错误正在发生

git fetch

但在我的情况下,我只是想要更新的主要分支可以使用

git fetch origin main

不是一个解决锁定参考问题的方法,但它帮助我避免了这个问题:P

这是我所做的,以摆脱所有的锁引用问题:

git gc --prune=now
git remote prune origin

这可能也是你唯一需要做的。

更多关于git gc命令的信息请访问:https://git-scm.com/docs/git-gc

更多关于git远程修剪的信息请访问:https://git-scm.com/docs/git-remote#Documentation/git-remote.txt-empruneem

在我的例子中,它与我已经创建的分支名称相连接。

为了解决这个问题,我创建了一个分支,它的名字肯定不应该存在,比如:

git checkout -b some_unknown_branch

然后我清除了所有其他分支(不活动),因为它们只是不必要的垃圾。

git branch | grep -v \* | grep -v master | xargs git branch -D

然后用我想要的名字重命名我的当前分支,比如:

git checkout -m my_desired_branch_name

对我来说,当我试图用这样的名字创建一个新分支时,就发生了这种情况:

master/pre-upgrade

将其更改为另一个名称,例如:

pre-upgrade/master

成功了!

关于这个问题的一些附加信息

Git将分支信息存储为文件夹结构中的文件,其中/后面的最后一个字符串是包含分支头的提交SHA#的文件。

这意味着分支调用

a/b/c

将存储在

.git/refs/heads/a/b/c

如果您尝试添加一个名为

a/b/c/d

Git会尝试存储它

.git/refs/heads/a/b/c/d 

但这是不可能的,因为b是一个文件,不能存储其他文件在它。

i.e.将git分支名视为路径,因为它们被git用作路径。