2014-03-27 95 views
0

我試圖刪除遠程主分支:無法刪除遠程主分支

git push origin :master 

我分支的清單:

$ git branch -avv 
* survey-content    c3356d9 [origin/survey-content] Runtime textures for survey 
    remotes/origin/master   4300c27 New Survey layout for message header 
    remotes/origin/survey-content c3356d9 Runtime textures for survey 

當我做git push我前面提到的,我出現以下錯誤:

remote: error: By default, deleting the current branch is denied, because the next 
remote: error: 'git clone' won't result in any file checked out, causing confusion. 
remote: error: 
remote: error: You can set 'receive.denyDeleteCurrent' configuration variable to 
remote: error: 'warn' or 'ignore' in the remote repository to allow deleting the 
remote: error: current branch, with or without a warning message. 
remote: error: 
remote: error: To squelch this message, you can set it to 'refuse'. 
remote: error: refusing to delete the current branch: refs/heads/master 
To c:/Dropbox/Repositories/repo.git 
! [remote rejected] master (deletion of the current branch prohibited) 
error: failed to push some refs to 'c:/Dropbox/Repositories/repo.git' 

這是我推到一個純倉庫,所以應該沒有「真正水流nt分支「。爲什麼我無法遠程刪除主分支?它應該與任何其他分支沒有區別,特別是因爲我以前已經擺脫了origin/HEAD

回答

0

全部 git存儲庫有一個「當前分支」,除非他們有一個「分離的HEAD」。

(如果你刪除文件HEAD,混帳不再認爲該庫是一個存儲庫,所以總有一個HEAD和任何ref: refs/heads/branch它包含分支名稱是當前的分支,即使是裸回購)

正如錯誤消息所述,爲了刪除,您可以設置一個git配置變量。我不確定如果你刪除那個分支會發生什麼(見腳註)。


拆卸頭裸回購可能將允許刪除,但這樣做從它git clone時會引起有點古怪的。 git協議中存在一種錯誤:當您連接到遠程並詢問其引用時,它不會將任何間接引用顯示爲間接引用。由於HEAD幾乎總是指向分支的間接參考,換言之,系統上正在進行克隆的git(本地git)具有破綻:它要求遠程git列出其所有參考文獻及其SHA-1,然後查看哪個分支具有與HEAD相同的SHA-1。然後假設它必須是遠程處於「打開」的分支,並且這是git clone檢出的默認分支。除非有零或兩個或更多的SHA-1分支,否則這很有效......

+0

恕我直言,裸庫中,應當默認啓用該變量,它的比沒有設置的幫助更煩人。感謝您的解釋,但對於像我這樣的新手來說,這似乎很不直觀,因爲它表現得如此奇怪。 –

+0

git中有很多奇怪的東西...... :-) – torek

0

這是因爲github正在查看主分支分支,以便在您瀏覽該存儲庫時提供Web內容。所以我們首先必須讓github看看我們的佔位符分支,然後刪除master。

首先推升佔位分支:

  • git的結帳佔位#如果沒有佔位符已經
  • 混帳推起源佔位 然後設置佔位是GitHub的默認科。轉到分叉存儲庫的主github頁面,然後單擊「管理」按鈕。

屏幕頂部附近有一個「Default branch」下拉列表。從那裏,請選擇佔位符。在我所看到的界面上,下拉列表上方會出現一個綠色的勾號。現在你可以(通過命令行)做的事:

  • 混帳推產地:主

和 - 無主分支...