Saat menghapus "git branch remote" kesalahan: tidak dapat mendorong ke tujuan yang tidak memenuhi syarat "

139

Saya mencoba untuk menghapus cabang git jarak jauh dengan

git push origin :my_remote_branch

dan mendapatkan:

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 '[email protected]:/myrepo'

ini adalah cabang saya saat ini

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

Setiap ide tentang bagaimana saya dapat menyingkirkan cabang ini akan sangat dihargai.

Hugo
sumber
Apakah Anda mencoba git fetchuntuk melihat apakah itu memperbaiki nama jarak jauh yang tidak ada? Apakah Anda mencoba masuk .git\refs\remotes\origindan menghapus my_remote_branchfile, untuk melihat apakah itu sudah cukup?
VonC
melakukan git fetchtapi itu tidak membantu. Akan mencoba mencari solusi yang lebih lurus sebelum mencoba menghapus file secara manual.
Hugo
coba hapus atau paling tidak pindahkan file itu: itu hanya berisi SHA1 dari ujung cabang itu.
VonC
45
Anda harus melakukan git fetch -puntuk menyingkirkan cabang pelacakan basi.
Jan Hudec

Jawaban:

270

Fakta yang refs/remotes/origin/my_remote_branchada di repositori lokal Anda tidak menyiratkan refs/heads/my_remote_branchada di originrepositori jarak jauh.

Lakukan git fetch -p originuntuk refs/remotes/origin/my_remote_branchmenghapus jika sudah dihapus dari asalnya. The -ppilihan memberitahu mengambil untuk menghapus cabang pelacakan yang tidak lagi ada di remote yang sesuai; secara default mereka disimpan.

Jan Hudec
sumber
12
git fetch -p originmemperbaikinya untukku. Terima kasih banyak.
redimp
1
Jawaban Anda luar biasa. Singkat dan tentang esensi!
1nstinct
pemangkasan tidak membantu! sementara git push origin --delete origin/feature/xmemberi saya kesalahan tentang tidak adanya ref git push origin :feature/xmenghapus cabang. Jadi saya kira git push origin --delete <branchName>seharusnya tidak menyertakan asal dalam branchName (?) Tetapi bash-selesai yang membingungkan.
cepat
@ bulu mata, Anda berada dalam situasi yang berbeda dari penanya yang asli. Dalam pertanyaan awal, masalahnya adalah bahwa cabang jauh sudah dihapus , mungkin oleh orang lain, jadi hanya lokal yang harus disinkronkan. Saat Anda menghapus remote. Memang, perintahnya seharusnya git push origin --delete feature/x, karena Anda memberikan nama cabang pada asal , dan tidak memiliki awalan di sana (kedua bentuk itu tetap identik).
Jan Hudec
@ JanHudec masuk akal. Bash complete pintar saat digunakan :untuk tidak memasukkan origintetapi selesai sebagai origin/branch_nameganti daripada hanya branch_namesaat menggunakan --deletevarian.
dashesy
56

Ditemukan pertanyaan membersihkan cabang - cabang remote git lama dan ini berhasil

git branch -r -d origin/my_remote_branch
Hugo
sumber
Saya sudah mencoba melakukan ini selama sekitar satu jam sekarang, terima kasih banyak!
sebkkom
Ini tidak menghapus cabang jarak jauh. Jika Anda mengambil git, Anda akan melihat cabang lagi. Hanya menghapusnya dari daftar cabang jarak jauh lokal Anda.
Patrick Desjardins
2
@PatrickDesjardins secara tepat git push origin :my_remote_branchmenghapus cabang dari jarak jauh dan git branch -r -d origin/my_remote_branchmenghapusnya dari daftar cabang jarak jauh lokal saya
Hugo
11

Saya berlari melintasi ini ketika mencoba untuk menghapus cabang jauh yang sudah dihapus. Semua yang dibutuhkan hanyalah pangkas:

git remote prune origin
Matius
sumber
4

Coba ikuti dua opsi untuk menghapus cabang jarak jauh secara paksa

Pilihan 1

get push origin --delete <branchName>

pilihan 2

git fetch -p origin
git branch -r -d origin/<branchName>
Pawan Maheshwari
sumber
3
git branch -r -d origin/my_remote_branch

itu tidak cukup untukku. Sebelum saya harus pergi ke server dan bekerja dengan direktori git secara langsung (yang berbahaya dan jelek) untuk menghapus cabang:

ssh mygitserver
su - git
cd /home/git/repositories/my_remote_branch.git/
git  --git-dir=. --work-tree=/tmp/ branch -D my_remote_branch
pevik
sumber
Bukan hanya berbahaya dan jelek, itu juga salah . Untuk satu hal, pertanyaan ini adalah tentang menghapus cabang lokal ketika telah dihapus di terpencil. Dan untuk yang lain, menghapus cabang dari jarak jauh hanyalah masalah git push origin :my_remote_branch. Pikirkan usus besar.
Jan Hudec
Anda benar Jan, itu git push origin :my_remote_branchcara biasa. Cara jelek dan berbahaya ini adalah ketika ini tidak berhasil (misalnya karena kesalahan konfigurasi git).
pevik
1

Saya memiliki masalah yang sama. Pertama pergi ke diskusi ini, namun saya tidak bisa menyelesaikan masalah sampai saya melihat https://stackoverflow.com/a/32147743/4209849 .

yang hanya menambahkan tip tentang membedakan origin/my-branch-namedan my-branch-name.

Untuk lebih spesifik, saya harus menggunakan:

git push origin :my_remote_branch

dari pada

git push origin :origin/my_remote_branch

Setidaknya ini menyelesaikan masalah saya, berharap itu akan membantu orang lain juga.

Kangqiao Zhao
sumber
1

Bagi saya masalahnya adalah, ini adalah cabang default saya di github. Saya mengubah cabang default, kemudian operasi penghapusan berhasil.

Semoga ini bisa membantu seseorang

Vlad Pulichev
sumber
0

Mengalami masalah yang sama ini, saya mengedit ./.git/configfile saya secara manual untuk memasukkan:

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

Yang menghasilkan: error: src refspec branchName matches more than one.Ini saya perbaiki dengan menjalankan $git tag -d branchName. Setelah itu saya bisa mendorong cabang baru ke hulu.

Kaweesi Joseph
sumber
0

Ini bekerja untuk saya: Saya membuat cabang jarak jauh pada UI github dan kemudian mendorong cabang lokal saya yang memiliki nama yang sama. Cobalah kalau-kalau cara lain tidak berhasil. Cara lain adalah membuat cabang baru secara lokal dan mendorong cabang kosong dan kemudian memilih komis Anda dan mendorong lagi ke remote Anda.

Nutan
sumber