32

我正在尝试将分支从本地推送到原点。分支名称和路径相同。我已经从这个分支推拉了一段时间,从来没有遇到过问题。但突然间,它开始表现得很糟糕。上次我尝试使用以下命令推送到原点时:

git push origin feature/Prizefulfilment

它给了我以下错误:

72c6c1da98e5cff4484e254a538d9e3b472156ff but expected 0000000000000000000000000000000000000000

我用谷歌搜索了一遍,但还没有找到一个非常令人满意的解决方案。

我的确切错误如下所示:

$ git push origin feature/Prizefulfilment
Counting objects: 126, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (75/75), done.
Writing objects: 100% (78/78), 8.83 KiB, done.
Total 78 (delta 61), reused 0 (delta 0)
error: Ref refs/heads/feature/Prizefulfilment is at 72c6c1da98e5cff4484e254a538d9e3b472156ff but expected 0000000000000000000000000000000000000000
remote: error: failed to lock refs/heads/feature/Prizefulfilment
To git@devtools.contestfactory.com:OpusOneSCRUM
 ! [remote rejected] feature/Prizefulfilment -> feature/Prizefulfilment (failed to lock)
error: failed to push some refs to 'git@devtools.contestfactory.com:OpusOneSCRUM'`

有任何想法吗?

4

8 回答 8

36
 git push feature/prizeFulfilment: feature/Prizefulfilment

这类似于这个答案

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

我们刚刚遇到了这个完全相同的错误,并且能够通过重命名本地分支以匹配现有远程分支的大小写来解决问题。

尝试并确保在本地和远程分支之间使用相同的大小写

您的第二个命令使prizeFulfilment远程和远程之间的链接Prizefulfilment显式,这就是它起作用的原因。但是,让本地分支机构保持这种差异并不是一个好的解决方案。

于 2012-09-14T05:55:48.737 回答
9

我看到这个错误发生是因为以前的分支与我的新分支路径名称同名。例子:

  • 远程有分支:some_feature
  • 本地有分支:some_feature/some_subfeature
  • 本地将分支推some_feature/some_subfeature送到远程
  • 远程有错误:(failed to lock)

解决方案:

  • 将本地分支重命名some_feature/some_subfeaturefoo/some_subfeature
  • 删除远程分支some_feature
于 2017-02-08T17:23:31.773 回答
5

发生在我身上的是 git 正在改变我本地分支的大小写。我有一个名为 Feature/blahBlah 的旧分支和一个名为 feature/fooBar 的新分支。后者自动重命名为 Feature/fooBar 因为 git 将分支存储为文件夹,我不能使用不同大小写的相同文件夹名称。

要修复它,我必须进入 .git/refs/heads 并将“Feature”重命名为“feature”,以便所有分支都保持一致。

于 2015-08-26T20:28:56.860 回答
5

在区分大小写的系统上也存在问题的另一个可能原因是冲突名称。

如果远程存储库包含分支a/b并且您正在尝试推送分支a/b/c,则 git 将报告相同的错误(肯定应该改进此错误描述)。

https://coderwall.com/p/qkofma/a-caution-about-git-branch-names-with-s https://ocroquette.wordpress.com/2011/07/10/git-failed-to-lock /

于 2015-09-08T08:46:59.203 回答
1

就我而言,这是在 git 存储库中未正确设置权限。我在这里找到了解决方案:如何在 git 存储库上正确使用组文件权限?

问题是当创建一个包含路径(功能/Prizefulfilment)的新分支时,在“refs/heads/”中创建文件夹“feature”,并且新文件夹继承了用户组 ID,这会阻止未来用户使用相同的路径。

要解决这个问题,您必须将 setgid 设置为 git 存储库中的所有目录,以便新文件夹继承其组 ID,而不是用户的组 ID。

chown -R git:git /path/to/repo
chmod -R g+rw /path/to/repo
find /path/to/repo -type d -print0 | xargs -0 chmod g+s
于 2018-03-13T08:52:55.563 回答
0

在我的情况下,我结帐了一个全小写字母的分支。这导致远程分支和本地分支名称不一致。

远程分支是 INT-4368-some-feature-details,而本地分支是 int-4368-some-feature-details。

为了解决这个问题,我进入了 .git\refs\heads\feature 并重命名了分支名称以匹配远程。然后去命令行运行

git checkout INT-4368-some-feature-details
于 2016-07-18T20:22:40.313 回答
-1

当您收到这样的消息时,首先从远程分支执行拉取操作。然后执行推送操作。当有人将文件推送到远程服务器时,它会将主分支(如果远程分支是主分支,它可以是任何名称)转移到某个其他地方。您需要在本地存储库中更新它,以便本地存储库中的 origin/master 向前移动。然后在本地存储库中添加文件并提交它。然后执行推送操作。它对我有用

于 2016-02-03T06:10:08.170 回答
-1

本地和远程仓库的分支名称在大小写方面不匹配,您可以使用以下命令重命名本地分支:-

git branch -m new-name
于 2019-07-24T09:13:38.890 回答