2011-11-01 32 views
19

コマンドgit branch -aは、リポジトリにはなくローカルブランチではないブランチをリストします。これらはどのように削除できますか?例えばgit branch -aによってリストされたブランチを削除する

* develop 
    master 
    remotes/origin/cloner 

remotes/origin/clonerはレポに存在するために使用されるが、それ以来削除されていると私はgit branch -aを入力したときに表示されていないことをしたいと思います。

答えて

27

あなたが対応するブランチがリモートリポジトリに削除された後に残されているリモート追跡ブランチ(この場合のようなorigin/cloner)を持っている場合、あなたはそのようなすべてのリモート追跡の枝で削除することができます。

 
git remote prune origin 
<名前>の下にあるすべての古いリモート追跡ブランチを削除します

documentation for git remoteはこのように説明しています。これらの古くなったブランチは、<という名前のリモートリポジトリからすでに削除されていますが、引き続き「remotes/<の名前>」でローカルに利用できます。

--dry-runオプションを指定すると、どのブランチがプルーニングされるのかを報告しますが、実際にプルーニングは行いません。

+4

それは麦汁だ不要なリモートブランチを削除するには

git push origin :cloner 

行いますこれを拡張して、恐らくドキュメントを引用してリンクするだけです。 –

+0

Mark、すばらしい編集をありがとう! –

-5

リモートリポジトリ参照がローカルクローンから削除されても、 'git branch -a'コマンドの出力に表示されることがあります。 いずれにせよ、あなたは常に単純に対応するファイル削除することによって、すべての参照を抑止することができます:あなたは、次のコマンドを使用することができますもはや必要ないブランチを削除するには

$ rm -f .git/refs/remotes/cloner 
$ rm -rf .git/refs/remotes/deprecated_remote 
+0

porcelainコマンドを使うのではなく、 '.git'の中から直接ファイルを削除するのは悪い考えです。 –

+0

Gitは非常に堅牢です。 .git/configファイルを編集する必要があるのは、たとえば、特定のブランチのトラッキングを追加したり、リモートリポジトリのURLを変更したりする場合に便利です。 Gitがどのように動作するのかを理解しやすくし、初めて登場したときと同じ魔法であることを理解することができます。 だから、誰もがGitファイルを編集することはお勧めしませんが、少なくともそれらのファイルには賢いことがあることをお勧めします。ミニナムでは、非常に有益です。 –

3

を:

git branch -d -r origin/cloner 
+1

'origin/cloner'はリモートトラッキングブランチであるため、これは' git branch -d -r origin/cloner'にする必要があります。 –

0

ます。また、

+0

この場合、 'cloner'ブランチはリモートリポジトリから既に削除されているので、エラーが発生します。問題は、リモートトラッキングブランチ 'origin/cloner'を削除する方法です。' origin/cloner'は誰かが 'origin 'の' cloner'を削除した後に残されています。 –

+0

私は参照してください。次に、git fetchでリモートブランチリストをリフレッシュしないでください。 – Patrick

関連する問題