Git致命:无法锁定ref

时间:2017-07-17 09:58:36

标签: git git-branch git-checkout

我正在尝试在我的Ubuntu guest上的当前分支上创建一个分支。 不幸的是我一直收到这个错误:

git checkout -b origin/feature/IF-53-change-validation-window/Tommaso
fatal: cannot lock ref 'refs/heads/origin/feature/IF-53-change-validation-window/Tommaso': 
'refs/heads/origin/branch' exists; 
cannot create 'refs/heads/origin/branch/Tommaso'

我按照link的建议尝试git gc --prune=now,但不断收到同样的错误。

7 个答案:

答案 0 :(得分:8)

你不应该像那样检查分支机构。假设分支存在于原点,您应该执行以下操作:

git checkout feature/IF-53-change-validation-window/Tommaso

如果您运行git branch我希望您会看到名称中包含origin的本地分支。

格式git checkout X是"的简写;查找本地分支X并检查它是否存在;否则寻找远程分支X并在本地检查(git checkout -b X origin/X)。"

如果要创建新的本地分支,通常会执行以下操作:

git checkout -b new-branch

这将创建一个新分支,指向您之前检出的相同提交。

要修复当前状态,您可以执行此操作(see here):

git update-ref -d refs/heads/origin/branch

答案 1 :(得分:4)

这对我有用:

git --no-optional-locks fetch --prune origin 

答案 2 :(得分:3)

这也发生在我身上。原因是,我正在检查一个名为 feature 的分支,但在我本地我已经有一个名为 feature/new-feature 的分支。

答案 3 :(得分:1)

这也发生在我身上。 原因是我试图创建一个目录太深的分支。 成功创建的最深目录是: origin/titleA/titleB/nameOfTheNewBranch 我首先尝试更深入地创建它 origin/titleA/titleB/titleC/nameOfTheNewBranch 这似乎太深了,因为它不起作用。

答案 4 :(得分:0)

有时,如果您创建的分支名称与git命名约定或项目git管理员设置的约定不匹配,则可能会发生这种情况。将名称更改为可以更改的名称可以解决此问题。

答案 5 :(得分:0)

我只是遇到了类似的问题,原因是,由于删除了存储库中的分支,所以无法访问本地,所以,我要做的是删除本地分支并从存储库中提取新分支,然后创建功能分支,它确实起作用

  • 如果您删除了仓库中的分支,那么它仍然可以在本地使用

答案 6 :(得分:0)

我在这里寻找答案,但实际上我的问题更简单,但无法解决。

  • repo 的新克隆
  • git checkout foo/bar
  • git checkout -b foo/bar/baz
  • 收到类似的错误消息。

here, 所述,您不能同时使用 foo/bar 作为分支和目录。我不得不更改提议的命名约定。