git - 无法删除名为 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 合并。
我找不到任何会导致这种情况的设置。
解决方案
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
。
推荐阅读
- php - 如何在根文件夹的顶部对最新的文本文件内容进行排序和显示
- javascript - 如何调用具有唯一 ID 的孩子的孩子?
- java-8 - Java collectAndThen R 不可转换为 Set
- python - pandas:groupby 对象是否存储索引?
- java - drawImage() 拒绝绘制在方法外部实例化的图像
- node.js - 试图检索异步/等待的结果
- android - notifyDataSetChanged 后 GridView 项目动画不起作用
- angular - ...在引用子模块时不是已知元素
- javascript - React Data Grid 行在动态提供高度时消失
- excel - 使用 VBA 指定页面大小打印多个 PDF