リモートブランチを削除するとリモート参照が存在しないとGitが言う


130

私は走った git branch -a

* master
  remotes/origin/test
  remotes/origin/master

リモートブランチを削除したい

私はもう試した

git push origin --delete remotes/origin/test

わかった

エラー: 'remotes / origin / test'を削除できません:リモート参照が存在しません

どうして存在しないのですか?

私はをしましたgit branch -a、そしてそれがリストされているのを見ました。

私は何かを逃しましたか?


1
git branch -aリモートからではなく、ローカルのブランチを一覧表示します。正しい?

全部だと思います。私はわかりません。
cyber8200 2016年

2
ローカル内のリモートブランチが表示されます。すべてのリモートブランチがリストされるわけではありません。

1
@peterhは、「リモートブランチを削除できないのはなぜですか」(おそらくブランチがリモートから削除されたが、リモート参照がローカルにまだ存在している場合)と本当に尋ねているように見えます。したがって、複製ではありませんが、より明確なタイトル
アンドリュースペンサー

1
タイトルを編集しました。これが質問の意図に近いものであることを願っています
Andrew Spencer

回答:


259

このコマンドgit branch -a、ローカルリポジトリに存在するリモートブランチを表示します。これは少し混乱するように聞こえるかもしれませんが、理解するには、リモートブランチとリモートリポジトリに存在するブランチの間に違いがあることを理解する必要があります。リモートブランチは、リモートリポジトリのブランチにマップするローカルブランチです。したがって、リモートブランチのセットは、リモートリポジトリの状態を表します。

リモートブランチのリストを更新する通常の方法は、を使用することgit fetchです。これにより、リモートからブランチの更新リストが自動的に取得され、ローカルリポジトリにリモートブランチが設定されます。また、不足している可能性のあるコミットオブジェクトもフェッチされます。

ただし、デフォルトでgit fetchは、リモートに対応するブランチがないリモートブランチは削除されません。そのためには、リモートブランチのリストを明示的にプルーニングする必要があります。

git fetch --prune

これにより、リモートに存在しなくなったリモートブランチが自動的に削除されます。その後、git branch -rリモートに実際に存在するブランチの更新されたリストが表示されます:を使用して削除できるブランチgit push

とはgit push --deleteいえ、を使用するには、リモートリポジトリのブランチの名前を指定する必要があります。リモートブランチの名前ではありません。したがって、ブランチtest(リモートブランチによって表されるorigin/test)を削除するには、を使用しますgit push origin --delete test


また、git branch -r | grep "origin"フォークを使用する大規模プロジェクトの支援にもなります
Seraf

したがって、このメッセージをgitから取得する理由は2つあります。ブランチがサーバーですでに削除されているか、ブランチ名の先頭に誤ってを付けたためremotes/origin/です。または両方。
Andrew Spencer

136

の意味は、リモートサーバーでremotes/origin/test呼び出されるブランチがあることです。したがって、コマンドはtestorigin

git push origin --delete test

25

オリジンのブランチを削除するショートカットがあります:

git push origin :<branch_name>

するのと同じです git push origin --delete <branch_name>


13
  1. リモートブランチのリストを取得します
git fetch # synchronize with the server
git branch --remote # list remote branches
  1. リモートブランチのリストを取得する必要があります:
origin/HEAD -> origin/master
origin/develop
origin/master
origin/deleteme
  1. これでブランチを削除できます:
git push origin --delete deleteme


4

リモートブランチがremotes / origin / testの場合、2つの方法を使用できます。

git push origin --delete test

そして

git branch -D -r origin/test

3

私は最後に少し調整して突くことで解決策に従いました。私のステップは次のとおりです
- git fetch --prune;
- git branch -a以下を印刷します
    master
    branch
    remotes/origin/HEAD -> origin/master
    remotes/origin/master
    remotes/origin/branch(削除するリモートブランチ)
- git push origin --delete branch
ここで、削除するブランチには、という名前ではなくremotes/origin/branch、単にという名前が付けられていますbranch。そしてブランチが削除されます。


コメントreの+1:ブランチ名、私はorigin/branchそれがあるべきときに削除しようとしていましたbranch
ケン

1

git branch -a リモートのブランチではなく、ローカルのブランチをリストします。

エラーerror: unable to delete 'remotes/origin/test': remote ref does not existは、リモートにその名前のブランチがないが、ローカルにブランチが存在することを意味します。


これは役に立ちます。それは私の削除問題を解決しました。「gitのプッシュ--delete起源/テストは」仕事しませんでしたなぜ「gitのプッシュ--deleteテストが」働いていた間、私は、疑問に思って
user10293779

1

originから 'master'以外のブランチを削除するための便利なワンライナー:

git branch --remotes | grep -v 'origin/master' | sed "s/origin\///" | xargs -i{foo} git push origin --delete {foo}

これを実行する前に、これを実行することの意味を必ず理解してください!


このコードをありがとう!これは、master以外のすべてのリモートブランチを削除するためにテストした唯一のgitコードです。
アルビン

1

私にとってこれは$▶git branch -D -r origin / mybranch

細部

$▶gitブランチ-a | grep mybranch remotes / origin / mybranch

$▶gitブランチ-r | grep mybranch origin / mybranch

$▶gitブランチ開発*機能/導入前

$▶git push origin --delete mybranchエラー: 'mybranch'を削除できない:リモート参照が存在しないエラー:一部の参照を 'git@10.102.100.38:config / myrepo.git'にプッシュできませんでした

$▶git branch -D -r origin / mybranchリモートブランチorigin / mybranchを削除しました(以前は62c7421)。

$▶gitブランチ-a | グレップ・マイブランチ

$▶gitブランチ-r | グレップ・マイブランチ


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.