我正在尝试删除本地和远程 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 push origin --delete <branch-name>
要从您的计算机中删除本地分支:
git branch -d <branch-name>
要删除远程分支:
git push origin :<branch-name>
在您的情况下,上述陈述将是:
要从您的计算机中删除本地分支:
git branch -d feat
要删除远程分支:
git push origin :feat
当我想从origin删除master时,我遇到了同样的问题。
假设你想删除master,我分3步解决了这个问题:
转到您的存储库的 GitLab 页面,然后单击 “设置”按钮。
在默认分支中,将默认分支从主分支切换到 另一张。
在Protected Branches中,如果有任何保护,请取消对master的保护。
然后您再次尝试删除该分支。
如果您要删除的不是主分支,只需对所需分支执行相同的步骤即可。
编辑(根据 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
操作。如果您尝试删除多个分支,任何受保护的分支(例如默认分支,通常是
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
git 分支 -d origin/--remote
删除分支
gitbranch -DregistryDB(Git分支名称)
git推送来源:registryDB