2012-06-14 72 views
22

我已經用「git checkout -b mybranch」創建了分支。似乎出現了一些問題,現在我無法使用「git branch -D mybranch」將其刪除。它說:錯誤:分支'mybranch'找不到。在git中刪除破損的分支

+0

這是一個愚蠢的問題:你怎麼知道它還沒有被刪除,仍然存在? – bdares

+1

你可以在'git branch'中看到你的分支,或者在'.git/packed-refs'或'.git/refs/heads'中看到你的分支嗎? – Rup

+2

是的,我看到我的分支在git分支 –

回答

41

如果git branch -D確實無法正常工作,那麼您唯一的選擇是對其進行旁路並自己編輯git check-out的狀態。你應該去你退房(其中.git目錄)和

  1. 編輯.git/packed-refs的根目錄下;如果您看到有分行名稱的行,請將其刪除
  2. 請在.git/refs/heads中查看以分行名稱命名的文件;如果你看到一個,刪除它
1

你顯然不需要刪除一個不存在的分支。使用git branch可查看分支機構列表,如果分支機構不在該分支機構中,則不存在分支機構,並且您不需要刪除分支機構。否則,請確保正確輸入名稱,git branch -D應該可以正常工作。

儘管如此,你不需要關心很多可能仍然存在但是無法訪問的分支。 Git中的分支實際上只是簡單的40個字節的文件,所以不需要擔心。

+1

也可以嘗試'git branch -a'確保你沒有意外地將分支推送到遠程倉庫。如果你有,你可以閱讀說明如何刪除該分支[這裏](http://gitready.com/beginner/2009/02/02/push-and-delete-branches.html) – Shahbaz

+0

除非你當然可以因爲一個破損/被刪除的分支仍然處於打包狀態,所以不會推送。 – steviesama

+0

在後面看到一個破舊的分支參考文件堵塞了git客戶端,這仍然是一種痛苦。沒人願意。很顯然,這個傢伙正試圖刪除一個使用git分支的「出現」存在的分支。 –

7

我用git update-ref -d refs/heads/<branch name>來解決這個問題。據推測,這與Rup在所選答案中提出的建議相同,只是通過Git的CLI接口。

1

我有同樣的問題。無論何時執行git branch命令,分支都在分支列表中,但我無法刪除它。

在我的案例中的解決方案很簡單,有點意外:我檢查了破損的分支git checkout broken_branch(是的,它的工作),然後我檢查出主人和...再次執行git branch -D broken_branch

1

如果分支名稱中包含它需要被引用的特殊字符:

$ git branch -D 'ENH-Adding-unit-``julian``-to-``to_datetime``' 
+0

感謝您的建議。我的分支被稱爲'sandpit-ş-blockquotes' - 我試着按照你的建議引用它,但它仍然無效:-( '$ git branch -D'sandpit-ş-blockquotes''。 你還有什麼想法/建議? – samjewell

+0

@samjewell也許unicode符號不能被控制檯解釋嗎? – Winand

+1

@samjewell我能夠在SourceTree中創建和刪除分支https://pp.vk.me/c636719/v636719561/19786/ Q5DRz-b39VE.jpg – Winand

1

我有同樣的問題git branch -d <branch_name>不工作,我並沒有發現任何在.git/packed-refs.git/refs/heads但我

了文件

.git/refs/remotes/origin

帶有我無法在本地以及遠程刪除的分支的名稱。 但刪除後,我想刪除它不顯示在本地的branch_name文件。

要刪除它遠程使用

git fetch -p origin

的-p選項--prune告訴讀取前,刪除任何遠程跟蹤引用該遙控器上不再存在。 然後使用命令

git push origin :<branch_name_you_was_unable_to_delete>

在遠程刪除。

你就完成了。:)