Git 无法删除名为 release 的分支,并阻止创建以 release/ 为前缀的分支
Git branch named release cannot be deleted and prevents creating branches prefixed with 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
的分支,您将收到类似于您所看到的错误。
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'
错误告诉您一个名为 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
.
删除它
我无法创建以发布为前缀的分支:
$ 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
的分支,您将收到类似于您所看到的错误。
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'
错误告诉您一个名为 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
.