为什么我不能删除远程GitLab存储库中的分支?

时间:2017-06-20 16:05:18

标签: git gitlab

我正在尝试在本地和远程GitLab存储库中删除分支。它的名字是origin/feat。我试过了git push --delete origin feat。 Git抱怨道:

remote: error: By default, deleting the current branch is denied, because the next
remote: 'git clone' won't result in any file checked out, causing confusion.
remote: 
remote: You can set 'receive.denyDeleteCurrent' configuration variable to
remote: 'warn' or 'ignore' in the remote repository to allow deleting the
remote: current branch, with or without a warning message.
remote: 
remote: To squelch this message, you can set it to 'refuse'.
remote: error: refusing to delete the current branch: refs/heads/feat

确定有道理,所以我尝试使用origin/master切换到git checkout master并告诉我:Already on 'master'。是否还需要在远程目录中设置当前分支?我该怎么办?

6 个答案:

答案 0 :(得分:20)

尝试

  

git push origin --delete feat

答案 1 :(得分:13)

从计算机中删除本地分支:

git branch -d <branch-name>

删除远程分支:

git push origin :<branch-name>

在您的情况下,上述陈述将是:

从计算机中删除本地分支:

git branch -d feat

删除远程分支:

git push origin :feat

答案 2 :(得分:5)

编辑(OP-I的评论未使用GitLab):GitLab有一个带下拉菜单的Web界面。您需要在“设置”视图下(而不是“项目”视图)下的那个。在“默认分支”下的“设置”视图中选择一个分支,然后单击“保存更改”以在服务器上设置当前分支。

详细信息

你有正确的想法,但你必须记住,有两个存储库 - 涉及两个Gits。

任何时候你得到带有remote:前缀的文字,这意味着文字来自其他Git 。所以,当你让Git要求其他Git删除feat时,另一个Git抱怨feat是当前分支。

因此:

  

是否还需要在远程目录中设置当前分支?

是(好吧,“而不是”而不是“也”)。

  

我该怎么做?

通常,与使用任何存储库执行操作的方式相同:登录,cd到存储库目录,然后运行git checkout。但是在服务器上存在可推送存储库的障碍:

  • 它在服务器上。你甚至被允许登录?如果没有,您需要一些替代方案(特定于服务器)。
  • 它可能是--bare存储库,因此您无法直接使用git checkout。这里的诀窍是使用git symbolic-ref来更新HEAD

    git symbolic-ref HEAD refs/heads/master
    

    当然,这假设您可以登录(参见第一点)。例如,如果有一个允许您更改遥控器上当前分支的Web界面,则必须为您执行此git symbolic-ref操作。

答案 3 :(得分:1)

当我想从原点删除母版时,我遇到了同样的问题。

假设您要删除母版,我分3个步骤解决了该问题:

  1. 转到您的存储库的GitLab页面,然后单击 “ 设置”按钮。

  2. 默认分支中,将默认分支从母版切换到 另一个。

  3. 受保护分支中,如果有任何保护,请取消保护主服务器。

然后再次尝试删除分支。

如果不是要删除的母版,只需对所需分支执行相同的步骤即可。

答案 4 :(得分:0)

如果您要删除多个分支,则任何受保护的分支(例如,默认分支,通常为master)都会导致整个请求失败,因此,请尝试一次将其删除,或者排除已知的受保护分支

例如,我正在尝试使用删除合并的分支

$ git fetch  mygitlabremote --prune; \
    git branch --remotes --list mygitlabremote/* --merged \
    | cut -d/ -f2 | grep -v master \
    | xargs git push mygitlabremote  --delete
$ git fetch  mygitlabremote --prune

答案 5 :(得分:-1)

删除分支

git branch -D RegistryDB(一个Git分支名称)

git push origin:registryDB