Git问题:git push --all失败

13

我有一个位于 UNC \machine\share 的基础代码库......等等。

我有一个本地克隆,我在主分支上工作,并偶尔合并到“稳定”分支中。

通常我会执行
git push --all

将所有分支的所有更改推送到服务器。创建一个新的分支后 git branch MultiCompany

然后将其推送到服务器
git push --all

这也在服务器上创建了该分支。我做了一些工作,在多公司分支中提交了所有更改,然后尝试执行
git push --all

但是遇到了以下错误:

cdturner@OAHU ~/desktop/git sourcetree/maerekai.web.framework (multicompany) 
$ git push --all
Counting objects: 28, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (22/22), done.
Writing objects: 100% (23/23), 11.34 KiB, done.
Total 23 (delta 8), reused 0 (delta 0)
Unpacking objects: 100% (23/23), done.
error: Ref refs/heads/multicompany is at bd5a32df35ce8d5ae30ce999af34c4c5f35581df but expected 0000000000000000000000000000000000000000
remote: error: failed to lock refs/heads/multicompany
To //pluto/users/cdturner/Git repositories/Maerekai.web.framework.git
 ! [remote rejected] multicompany -> multicompany (failed to lock)
error: failed to push some refs to '//pluto/users/cdturner/Git repositories/Maerekai.web.framework.git'

我尝试使用git reset --hard HEAD^撤销最后一次提交,然后重新尝试推送......

cdturner@OAHU ~/desktop/git sourcetree/maerekai.web.framework (multicompany)
$ git push --all
Total 0 (delta 0), reused 0 (delta 0)
error: Ref refs/heads/multicompany is at bd5a32df35ce8d5ae30ce999af34c4c5f35581df but expected 0000000000000000000000000000000000000000
remote: error: failed to lock refs/heads/multicompany
To //pluto/users/cdturner/Git repositories/Maerekai.web.framework.git
 ! [remote rejected] multicompany -> multicompany (failed to lock)
error: failed to push some refs to '//pluto/users/cdturner/Git repositories/Maerekai.web.framework.git'`
4个回答

15

记录一下,我认为这个问题的根本原因是本地和远程分支名称之间的大小写不同,并且托管远程存储库的 Windows 共享是不区分大小写的。

我们刚遇到了完全相同的错误,只需将本地分支重命名以匹配现有远程分支的大小写,就能解决问题。

请查看如何重命名本地分支

在 Windows 中,由于大小写的原因,您可能需要执行两步操作:

git branch -m example foo
git branch -m foo EXAMPLE

谢谢!我也有同样的问题...感谢您的评论,我终于能够解决我在这里遇到的问题 :) - Guillermo
我无法使用SourceTree重命名(“分支已存在...”),因此我将其重命名为临时分支名称,从.git / refs / heads中删除具有不正确大小写的文件夹,然后将分支重新命名以使用正确的大小写。 - Carl G
当我尝试这个时,我收到了错误信息“fatal: A branch named already exists.”。所以我使用了“-M”开关。 - GeekyDaddy

6

在远程仓库上执行 git fsck --full 命令。远程仓库可能已经损坏。从远程克隆另一个仓库。用这个新的仓库替换原来的远程仓库。现在应该可以再次推送了。远程仓库出现了一些问题。你所做的一切都是正常使用中的操作。


5
我发现的错误是试图将一个名为develop的分支推送到具有以下分支名称的存储库中:develop/1148develop/693。git无法正常处理此操作(我忘记了为什么),因此删除这些分支(如果可能)可以修复此问题。

1
这对我来说是解决方案。当远程存在一个名为dev/rob的古老分支时,我试图推送dev。首先运行git push origin :dev/rob修复了它。 - robbles
我也试过了,当我尝试推送一个名为release/patch1的分支时,发现远程已经存在一个名为release的分支。 - Kyle Fransham
1
Git不允许使用相同名称的分支、分支文件夹和标签。TIL - Hannele

3

谢谢,git fsck --full 报告了“悬挂提交”。

所以 git prune 删除了有问题的内容,然后我又重新输入了它。但至少树已经全部解决了。

感谢您的帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接