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

问题描述 投票:0回答:7

我正在尝试删除本地和远程 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

OK 有道理,所以我尝试用

origin/master
切换到
git checkout master
,它告诉我:
Already on 'master'
。当前分支是否也需要设置在远程目录中?我该怎么做呢?

git gitlab
7个回答
66
投票

尝试

git push origin --delete <branch-name>

45
投票

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

git branch -d <branch-name>

要删除远程分支:

git push origin :<branch-name>

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

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

git branch -d feat

要删除远程分支:

git push origin :feat

12
投票

当我想从origin删除master时,我遇到了同样的问题。

假设你想删除master,我分3步解决了这个问题:

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

  2. 默认分支中,将默认分支从主分支切换到 另一张。

  3. Protected Branches中,如果有任何保护,请取消对master的保护。

然后您再次尝试删除该分支。

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


8
投票

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

详情

您的想法是正确的,但您必须记住,涉及到两个存储库(两个 Git)。

任何时候您收到带有

remote:
前缀的文本,这意味着该文本来自 other 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
    操作。


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

0
投票

git 分支 -d origin/--remote


-1
投票

删除分支

gitbranch -DregistryDB(Git分支名称)

git推送来源:registryDB

© www.soinside.com 2019 - 2024. All rights reserved.