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

sshcrbum  于 2022-12-25  发布在  Git
关注(0)|答案(6)|浏览(309)

我试图同时删除本地和远程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是有道理的,所以我尝试用git checkout master切换到origin/master,它告诉我:Already on 'master' .当前分支是否也需要在远程目录中设置?我该怎么做?

n7taea2i

n7taea2i1#

试试看

git push origin --delete <branch-name>
lg40wkob

lg40wkob2#

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

git branch -d <branch-name>

要删除远程分支:

git push origin :<branch-name>

在您的情况下,上述语句为:

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

git branch -d feat

要删除远程分支:

git push origin :feat
brc7rcf0

brc7rcf03#

当我想从源文件中删除主文件时,也遇到了同样的问题。

假设您要删除主文件,我通过3个步骤解决了此问题:

1.进入你的仓库的GitLab页面,点击“设置”按钮。
1.在默认分支中,将默认分支从主分支切换到另一个分支。
1.在受保护的分支中,如果有任何保护,请取消对主分支的保护。
然后再次尝试删除分支。
如果它不是您想要删除的主分支,只需按照相同的步骤删除所需的分支。

vyswwuz2

vyswwuz24#

编辑(根据OP-I的评论,未使用GitLab):GitLab有一个带有下拉菜单的网页界面,你需要在Settings视图下的下拉菜单(不是Project视图)。在Settings视图下的"Default branch"下选择一个分支,然后点击"Save changes"来设置服务器上的当前分支。

详细信息

你的想法是对的,但是你必须记住,有两个存储库--两个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操作。

zte4gxcn

zte4gxcn5#

如果你试图删除多个分支,任何受保护的分支(例如默认分支,通常是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
b1zrtrql

b1zrtrql6#

删除分支
git分支-D registryDB(一个Git分支名称)
git推送来源:registryDB

相关问题