首页 > 解决方案 > 无法删除名为 release 的 Git 分支,并阻止创建以 release/ 为前缀的分支

问题描述

我无法创建以发布为前缀的分支:

$ git checkout master && git pull
$ git checkout -b release/0.7.6
$ git push --set-upstream origin release/0.7.6
Total 0 (delta 0), reused 0 (delta 0), pack-reused 0
remote: 
remote: Create pull request for release/0.7.6:
remote:   https://bitbucket.org/xxx/xxx/pull-requests/new?source=release/0.7.6&t=1
remote: 
To bitbucket.org:xxx/xxx.git
 * [new branch]      release/0.7.6 -> release/0.7.6
Branch 'release/0.7.6' set up to track remote branch 'release/0.7.6' from 'origin'.
error: update_ref failed for ref 'refs/remotes/origin/release/0.7.6': cannot lock ref 'refs/remotes/origin/release/0.7.6': 'refs/remotes/origin/release' exists; cannot create 'refs/remotes/origin/release/0.7.6'

当我查看 bitbucket 界面时,我可以看到那里的分支release/0.7.6,0 次提交之前和 0 次提交之前 master。

写作git fetch会产生额外的错误:

$ git fetch
error: cannot lock ref 'refs/remotes/origin/release/0.7.6': 'refs/remotes/origin/release' exists; cannot create 'refs/remotes/origin/release/0.7.6'
From bitbucket.org:xxx/xxx
 ! [new branch]      release/0.7.6 -> origin/release/0.7.6  (unable to update local ref)

当我编写git checkout和使用制表符完成时,我确实得到了release可以检查的建议,但是当我尝试这样做时它再次失败:

$ git checkout release
fatal: cannot lock ref 'refs/heads/release': 'refs/heads/release/0.7.6' exists; cannot create 'refs/heads/release

我可以看到有一个东西叫它release以红色列出,但我无法删除它:

$ git branch -a | grep remotes/origin/release
  remotes/origin/release
$ git branch -D origin/release
error: branch 'origin/release' not found.
$ git branch -D release
error: branch 'release' not found.
$ git branch -D remotes/origin/release
error: branch 'remotes/origin/release' not found.

如果我先删除我创建的,可以签出release/0.7.6

$ git checkout release
Branch 'release' set up to track remote branch 'release' from 'origin'.
Switched to a new branch 'release'

我做了什么,我该如何解决?

更新 我们的 bitbucket 分支模型是传统的 git 流:

在此处输入图像描述

分支权限已保护历史记录并在 master 上写入,仅允许与 PR 合并。

我找不到任何会导致这种情况的设置。

标签: gitbitbucket

解决方案


TLDR;具有该模式的分支A/B作为一个名为的文件存在于名为B的文件夹中A。如果您已经有另一个名为 的分支A,您将收到与您看到的类似的错误。

错误:ref 'refs/remotes/origin/release/0.7.6' 的 update_ref 失败:无法锁定 ref 'refs/remotes/origin/release/0.7.6':'refs/remotes/origin/release' 存在;无法创建 'refs/remotes/origin/release/0.7.6'

该错误告诉release您 BitBucket 存储库中已存在一个名为的分支。在引擎盖下,它存储在.git/refs/remotes/origin/release. 现在您正在尝试推送一个名为的分支,该分支release/0.7.6将在.git/refs/remotes/origin/release/0.7.6. 由于该文件release已经存在,git 无法创建一个文件夹release来存储该0.7.6文件。

要解决此问题,请首先仔细检查您是否可以删除release分支。如果您确定这是安全的,那么您可以使用 删除它git push origin :release


推荐阅读