2012-06-14 7 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つ見たら、それを削除してください
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

packed-refsにまだ残っている壊れた/削除されたブランチのためにプッシュしません。 – steviesama

+0

それは、壊れた古いブランチの参照が自分のgitクライアントを詰まらせているのを見て、それでも後部の痛みです。誰もそれを望んでいない。明らかに、この男はgitブランチを使って存在するように見えるブランチを削除しようとしています。 –

7

私はこの問題を解決するためにgit update-ref -d refs/heads/<branch name>を使用しました。おそらく、これはGitのCLIを介してインターフェースされている以外は、選択された答えにRupが示唆しているものと同じことをします。

1

私は同じ問題を抱えていました。 git 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ユニコードシンボルがコンソールで正しく解釈されないことがありますか? – 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>

で使用してください。

これで完了です。:)

関連する問題