git delete remotes:リモート参照が存在しません


107

要するに;

  • リモートの複数のマージされたリモートを削除するにはどうすればよいですか?

より多くの背景;

マスターにマージされた数十のリモートを持つgitリポジトリがあります。以下を使用して、これらのリモートを1つずつ削除できます。

git push --delete origin myBranch-1234

ただし、これはすべてのリモートにとって遅くて退屈なプロセスです。だから私はこのコマンドを試しています:

git branch -r --merged | grep origin | grep -v master | xargs git push origin --delete

git branch -r --mergedマージされたすべてのリモートをリストします。
grep originコマンドにoriginを含めるように指示します。
grep -v masterコマンドにマスターを除外するように指示します。
xargs git push origin --deleteコマンドにリモートのリストを削除するように指示します。

まとめると、マージされたすべてのリモートを収集して削除することを期待しています。

上記のコマンドを実行すると、マージされたリモートごとに次のメッセージが表示されます。

error: unable to delete 'origin/myBranch-1234': remote ref does not exist
error: unable to delete 'origin/myBranch-1235': remote ref does not exist
error: unable to delete 'origin/myBranch-1236': remote ref does not exist
error: unable to delete 'origin/myBranch-1237': remote ref does not exist
... etc

ただし、これらのリモートは存在し、それぞれをチェックアウトできます。多くのサイトや人々は、git fetch --prune足りない参照をクリーンアップするために実行することを勧めています。これらのリモートがすべて存在するため、これは何もしません。

だから私はあなたにお願いします、親愛なるスタック交換。

  • 1つのリモートを削除できるが、多くはできないのはなぜですか?
  • 私のコマンドは正しいですか?

私は何か小さいものを見逃していると思います。これを研究するたびに、私はこれを正しく行っているように見えますが、上記のエラーが発生しています。

回答:


226

最初に、リモートブランチのローカル「キャッシュ」をプルーニングする必要がある場合があります。実行してみてください:

git fetch -p origin

削除する前。


2
それで解決しました、ありがとう!しかし、フェッチせずに更新しないのはなぜ--pruneですか?私の意見では、それはかなり誤解を招くものです
dave0688

6
検索からここに到着した人々へのメモ-これはここに着く大多数にとって明らかに有用ですが、元の問題に関しては実際には正しくありません-OPの問題は、彼のコマンドorigin/がブランチ名に誤って含まれていることでした。/他の回答で解決しました。
CupawnTae

104

それらのブランチはリモート(元)から削除されますか?はいの場合、あなたは単に行うことができます

git fetch --prune origin

そうしないと、ローカルで削除した後でも元に戻る可能性があります。

更新:コマンドをもう一度見ると、コマンドが正しく構築されていないようです。あなたはおそらく欲しい

git push origin --delete myBranch-1234

代わりにあなたは次のようなことをしています

git push origin --delete origin/myBranch-1234

元のブランチは削除されません。どれでもチェックアウトできます。
Jqw 2015

1
はい、2番目のケースでは異なるコマンドを実行するためです。
Mykola Gurov 2015

1
あなたの言い分がわかりません。私は2つの異なるコマンドを使用していることを知っています。2番目のケースは、すべてのマージされたリモートを取得git branch -r --mergedすることxargs git push origin --deleteです。それから、それらをで削除しようとしています。コマンドは、と考える以外は、リモートを削除しようとしていremote ref does not existます。
Jqw 2015

1
2番目のパイプコマンドで、echoをすぐ隣に置いて、xargs実際に何が実行されているかを確認します。
Mykola Gurov 2015

2
@Jqwを実行origin/しているため、ブランチ名にプレフィックスを含めることはできません。gitは、オリジンのブランチで作業していることをすでに認識していますgit push origin。ミコラの提案はxargs echo、ではなく、コマンドの最後の部分を作ることでしたecho xargs [...]
マシューが読む

15

sed'origin /'部分を削除し、lttile xargs部分を変更するために使用します。

git branch -r --merged | grep origin | grep -v -e master | sed s/origin\\/// |  xargs -I{} git push origin --delete {}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.