一尘不染

git push: refs/heads/my/subbranch 存在,无法创建

git

这不可能在服务器上的 repo 中创建 somme 子文件夹吗?

如果我做:

git push origin dev/master 

一切工作找到

但如果我这样做

git push origin dev/sub/master

我懂了:

error: 'refs/heads/dev/sub' exists; cannot create 'refs/heads/dev/sub/master'

我检查git branch -r并直接使用 ssh,还没有创建 dev/sub 文件夹。

怎么了?


阅读 160

收藏
2022-05-17

共1个答案

一尘不染

它不是一个存在的文件夹,而是一个分支。(嗯,可能在某个地方涉及到一个文件夹/目录 - 或者可能没有,因为引用被“打包”并停止作为目录中的文件存在。)

  • 如果分支b存在,b/anything则不能创建命名的分支。
  • 同样,如果分支dev/b存在,dev/b/c则无法创建。

这是 git 内部限制。在这种特殊情况下,远程origin有一个名为的分支dev/sub(不管你有没有,重要的是远程是否有它)。为了在 on 上创建origin一个名为 的分支dev/sub/master,您必须首先删除名为dev/subon的分支origin

git push origin :dev/sub

(当然,删除这个分支可能会删除一些重要的东西,所以请确保您知道自己在做什么。通常,您可能希望git fetch origin首先将它们捕获dev/sub为您的origin/dev/sub. 然后您可以创建一个名为dev/renamed-sub指向同一个提交的本地分支,dev/renamed-sub在遥控器上创建,删除遥控器dev/sub,然后dev/sub/master在遥控器上创建。)


如果您可以在远程(origin托管的系统)上登录,您可以进入那里的存储库并简单地重命名本地dev/sub分支。(根据下面的评论,我怀疑那里也有一个损坏的自动部署脚本,可能应该修复它以仅部署“可部署”分支,而不是所有被推送的内容。但我只是在这里猜测。)

2022-05-17