web-dev-qa-db-ja.com

Gitから無効なリモートブランチの参照をどのように削除しますか?

私の現在のリポジトリでは、私は次のような出力があります。

$ git branch -a
* master
  remotes/Origin/master
  remotes/public/master

ブランチリストからremotes/public/masterを削除したいです。

$ git branch -d remotes/public/master
error: branch 'remotes/public/master' not found.

また、publicがリストされていないため、git remoteの出力は奇妙です。

$ git remote show 
Origin

ブランチリストから 'remotes/public/master'を削除するにはどうすればいいですか?

更新、git Pushコマンドを試してみました:

$ git Push public :master
fatal: 'public' does not appear to be a git repository
fatal: The remote end hung up unexpectedly
701
cmcginty

クリーンアップが必要な場合があります

git gc --Prune=now

または、プルーンが必要な場合があります

git remote Prune public

プルーン

<name>の下のすべての古い追跡ブランチを削除します。これらの古いブランチは、<name>によって参照されるリモートリポジトリから既に削除されていますが、「remotes/<name>」でローカルに使用できます。

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

ただし、これらは以前にクリーンアップされているはずです

git remote rm public 

rm

<name>という名前のリモートを削除します。リモートのすべてのリモート追跡ブランチと構成設定が削除されます。

そのため、構成ファイルを手動で編集したのに、これが発生しなかったか、特権に問題がある可能性があります。

もう一度実行して、何が起こるか見てみましょう。

アドバイスコンテキスト

改訂ログ を見ると、何らかの理由でリポジトリで動作させたくない「正しい」テクニックを提案したことに気付くでしょう。

私は、OPがツリーを一貫性のない状態のままにして、少し奇妙な動作をさせたため、git gcが残骸を修正するために必要であると考えました。

通常git branch -rd Origin/badbranchはローカル追跡ブランチをnukingするのに十分です、またはgit Push Origin :badbranchはリモートブランチをnukingするのに十分です、そして通常nevergit gcを呼び出す必要はありません

715
Kent Fredric

あなたがする必要があるのはただ

git fetch -p

リモートで削除されているすべてのローカルブランチが削除されます。

あなたがgit 1.8.5+を使っているなら、あなたはこれを自動的に設定することができます

git config fetch.Prune true

または

git config --global fetch.Prune true
657
git Push public :master

Kent Fredricが指摘したように、これはmasterという名前のリモートブランチを削除します。

リモートトラッキングブランチを一覧表示するには

git branch -r

リモートトラッキングブランチを削除するには

git branch -rd public/master
314

あなたがする必要があるのはただ

$ git branch -rd Origin/whatever 

それはとても簡単です。ここでgcを呼び出す必要はありません。

156
jpswain

git gc --Prune=nowはあなたが望むものではありません。

git remote Prune public

リモートソースの場合はgit remote Prune Origin

あなたが欲しいものです

70
tongueroo

参照が詰まったときに受け入れられた答えは私のために動作しませんでした。しかしこれは:

$ git remote add public http://anything.com/bogus.git
$ git remote rm public
28
chris

私の場合、.git/packed-refsに保存されたエントリを削除しようとしていました。このプレーンテキストファイルを編集して、git br -Dがタッチ方法を知らないエントリを削除することができます(少なくともver 1.7.9.5では)。

私はここでこの解決策を見つけた: https://stackoverflow.com/a/11050880/1695680

7
ThorSummoner
git Push Origin --delete <branch name>

参照元: http://www.gitguys.com/topics/adding-and-removing-remote-branches/ /

4
kip2

私は同様の問題を抱えていました。答えのどれも助けにはならなかった。私の場合は、削除された2つのリモートリポジトリが永久に表示されていました。

私の最後のアイデアはそれへの参照をすべて手で削除することでした。

リポジトリは“ Repo”と呼ばれるとしましょう。やった:

find .git -name Repo

対応するファイルとディレクトリを削除しました

grep Repo -r .git

これにより、対応する行を削除したテキストファイルがいくつか見つかりました。今、すべてが問題ないようです。

通常、この仕事はgitに任せるべきです。

2
Keinstein

ほんの少しだけ関連がありますが、私たちが持っていたのと同じ状況ではまだ役に立つかもしれません - 私たちのリモートリポジトリにはネットワークファイル共有を使います。先週、物事はうまくいっていました、今週我々はエラーを得ていました「リモートオリジンはブランチレファレンス/ヘッド/マスターのためにレファレンスをアドバタイズしませんでした。

しかし、私たちは物事を汚すために何もしていないと信じていました。 NFSはスナップショットを作成するので、それぞれの「以前のバージョン」を確認し、3日前にリポジトリのサイズが282MBから33MBになり、約1,403の新しいファイルと300のフォルダが存在することがわかりました。同僚に問い合わせたところ、その日にプッシュを実行しようとしていましたが、キャンセルしました。

私はそれをその日付の直前に復元するためにNFSの「復元」機能を使用し、そして今やすべてが再び正常に動作しています。私は以前にプルーンを試してみました、助けにはならないようでした。もっと厄介なクリーンアップがうまくいったかもしれません。

これがいつか他の人に役立つことを願っています!

ジェイ

2
JGlass

私はgit branch -rdについて知らなかったので、私が自分でこのような問題を解決した方法は自分のリポジトリをリモートリポジトリとして扱い、リモート削除をすることです。 git Push . :refs/remotes/public/master。他の方法がうまくいかず、あなたが取り除きたいと思う奇妙な参照があるのなら、この生の方法は確かです。それはあなたにどんな種類の参照を削除する(または作成する)正確な精度を与えます。

2
clacke