簡體   English   中英

為什么我不能刪除遠程GitLab存儲庫中的分支?

[英]Why can't I delete a branch in a remote GitLab repository?

我正在嘗試在本地和遠程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' 是否還需要在遠程目錄中設置當前分支? 我該怎么辦?

嘗試

git push origin --delete feat

要從您的計算機中刪除本地分支:

git branch -d <branch-name>

要刪除遠程分支:

git push origin :<branch-name>

在您的情況下,上述陳述將是:

要從您的計算機中刪除本地分支:

git branch -d feat

要刪除遠程分支:

git push origin :feat

編輯(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操作。

當我想從原點刪除master時,我遇到了同樣的問題。

假設您要刪除主服務器 ,我通過3個步驟解決了問題:

  1. 轉到存儲庫的GitLab頁面,然后單擊“ 設置 ”按鈕。

  2. 在“ 默認分支”中 ,將默認分支從主分支切換到另一分支。

  3. 受保護的分支中 ,如果有任何保護,請取消保護主數據。

然后再次嘗試刪除分支。

如果它不是您要刪除的主數據庫,只需按照所需分支執行相同的步驟即可。

如果你試圖刪除多個分支,任何受保護的分支(例如默認分支,通常是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 branch -D registryDB(一個Git分支名稱)

git push origin:registryDB

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM