リモートgitブランチを削除すると、「エラー:修飾されていない宛先にプッシュできません」


139

私はリモートgitブランチを削除しようとしています

git push origin :my_remote_branch

そして得る:

error: unable to push to unqualified destination: my_remote_branch
The destination refspec neither matches an existing ref on the remote nor
begins with refs/, and we are unable to guess a prefix based on the source ref.
error: failed to push some refs to 'git@example.com:/myrepo'

これらは私の現在のブランチです

git branch -a
* develop
  master
  remotes/origin/HEAD -> origin/master
  remotes/origin/develop
  remotes/origin/my_remote_branch

git branch -r --merged
  origin/HEAD -> origin/master
  origin/develop
  origin/master

私がこのブランチをどのようにして取り除くことができるかについてのアイデアは、いただければ幸いです。


あなたは試してくださいましたgit fetch、それは、非既存のリモート名を固定かどうかを確認するために?中に行っ.git\refs\remotes\originmy_remote_branchファイルを削除して、それで十分かどうか確認しましたか?
VonC、2012

したgit fetchが、それは助けにはならなかった。ファイルを手動で削除する前に、より簡単な解決策を探します。
Hugo

そのファイルを削除するか、少なくとも移動してみてください。そのブランチの先端のSHA1のみが含まれています。
VonC、2012

45
git fetch -p古くなったトラッキングブランチを取り除くために実行する必要があります。
Jan Hudec

回答:


270

refs/remotes/origin/my_remote_branchローカルリポジトリに存在するという事実refs/heads/my_remote_branchは、originリモートリポジトリに存在することを意味するものではありません。

やるgit fetch -p origin作るためにrefs/remotes/origin/my_remote_branch、それはすでに起源で削除されます場合は離れて行きます。この-pオプションは、対応するリモートに存在しなくなった追跡ブランチを削除するようにfetchに指示します。デフォルトでは、それらは保持されます。


12
git fetch -p origin私のために修正しました。ありがとう。
redimp

1
あなたの答えは素晴らしいです。短くて本質について!
2015年

剪定は役に立ちませんでした!一方、git push origin --delete origin/feature/x非存在REFについて私にエラーを与えたgit push origin :feature/xブランチを削除しました。そのgit push origin --delete <branchName>ため、branchName(?)にoriginを含めないでください。ただし、bashで補完されているため、混乱を招きます。
ダッシュダッシュ2016年

@dashesy、元の質問者とは状況が異なりました。元の質問では、問題はリモートブランチがおそらく他の誰かによってすでに削除されているため、ローカルのみを同期する必要があったことです。リモコンを削除している間。実際、origingit push origin --delete feature/xブランチの名前を指定し、そこにそのプレフィックスがないため、コマンドはである必要があります(2つの形式はともかく同義語です)。
Jan Hudec、2016年

@JanHudecは理にかなっています。:インクルードを使用しない場合のbashの完了はスマートですが、バリアントを使用する場合の代わりにorigin完了します。origin/branch_namebranch_name--delete
16年

56

古いリモートgitブランチクリーンアップする質問が見つかり、これでうまくいきました

git branch -r -d origin/my_remote_branch

私はこれを正確に1時間ほどやっています、本当にありがとう!
sebkkom 2014年

これはリモートブランチを削除しません。git fetchを実行すると、ブランチが再び表示されます。リモートブランチのローカルリストから削除するだけです。
Patrick Desjardins 2014年

2
@PatrickDesjardins git push origin :my_remote_branchは、リモートからブランチを正確に削除し、git branch -r -d origin/my_remote_branchリモートブランチのローカルリストから削除します
Hugo

11

すでに削除されているリモートブランチを削除しようとしたときに、これに遭遇しました。必要なのはプルーンだけでした。

git remote prune origin

4

リモートブランチを強制的に削除するには、次の2つのオプションを試してください

オプション1

get push origin --delete <branchName>

オプション2

git fetch -p origin
git branch -r -d origin/<branchName>

3
git branch -r -d origin/my_remote_branch

私には十分ではありませんでした。サーバーに行ってgitディレクトリを直接操作する必要があった前に(これは危険で醜いです)、ブランチを削除しました。

ssh mygitserver
su - git
cd /home/git/repositories/my_remote_branch.git/
git  --git-dir=. --work-tree=/tmp/ branch -D my_remote_branch

それは危険で醜いだけでなく、間違っています。一つには、この質問は、それはときローカルブランチを削除についてですリモートで削除されました。もう1つは、リモートからブランチを削除することはの問題ですgit push origin :my_remote_branch。コロンを気にします。
Jan Hudec 2014

あなたは正しいヤンです、それgit push origin :my_remote_branchは通常の方法です。この醜く危険な方法は、これが機能しない場合です(たとえば、Gitの設定ミスにより)。
pevik 2014

1

同様の問題があります。最初はこのディスカッションに行きましたが、https://stackoverflow.com/a/32147743/4209849を見るまで問題を解決できませんでした。

これは単に区別する上でヒントを追加origin/my-branch-nameしてmy-branch-name

具体的には、以下を使用する必要があります。

git push origin :my_remote_branch

の代わりに

git push origin :origin/my_remote_branch

これで少なくとも私の問題は解決しました。他の人にも役立つことを願っています。


1

私にとっての問題は、これがgithubのデフォルトのブランチであることでした。デフォルトのブランチを変更したところ、削除操作は成功しました。

それが誰かに役立つことを願って


0

これと同じ問題が発生したため、手動で./.git/configファイルを編集して以下を含めました。

[branch "branchName"]
remote = origin
merge = refs/heads/branchName

その結果:error: src refspec branchName matches more than one.これはを実行して修正しました$git tag -d branchName。その後、新しいブランチを上流にプッシュすることができました。


0

これは私にとってうまくいきました:github UIでリモートブランチを作成し、同じ名前のローカルブランチをプッシュしました。他の方法でうまくいかない場合に備えて試してください。他の方法は、ローカルで新しいブランチを作成して空のブランチをプッシュし、後でコミットをチェリーピックしてリモートに再度プッシュすることです。

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