Git mengatakan remote ref tidak ada ketika saya menghapus cabang jauh

130

Saya berlari git branch -a

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

Saya ingin menghapus cabang jarak jauh saya

Saya sudah mencoba

git push origin --delete remotes/origin/test

saya mendapatkan

error: tidak dapat menghapus 'remote / origin / test': remote ref tidak ada

Bagaimana itu tidak ada?

Saya melakukan git branch -a, dan saya melihatnya terdaftar.

Apakah saya melewatkan sesuatu?

cyber8200
sumber
1
git branch -aakan mendaftar cabang di lokal Anda dan bukan dari remote Anda. Baik?
Saya pikir mereka semua. Saya tidak yakin.
cyber8200
2
Ini akan menunjukkan cabang-cabang jarak jauh dalam lokal Anda. Ini tidak akan mencantumkan semua cabang jarak jauh.
1
@peterh Sepertinya saya benar-benar bertanya "mengapa saya tidak bisa menghapus cabang jarak jauh" (mungkin ketika cabang telah dihapus dari jarak jauh tetapi referensi jarak jauh masih ada secara lokal) dan karena itu, bukan duplikat tetapi bisa dilakukan dengan judul yang lebih jelas
Andrew Spencer
1
Saya menyunting judulnya, semoga ini lebih dekat dengan maksud pertanyaan
Andrew Spencer

Jawaban:

259

Perintah ini git branch -amemperlihatkan cabang jarak jauh yang ada di repositori lokal Anda . Ini mungkin terdengar agak membingungkan tetapi untuk memahaminya, Anda harus memahami bahwa ada perbedaan antara cabang jarak jauh, dan cabang yang ada di repositori jarak jauh. Cabang jauh adalah cabang lokal yang memetakan ke cabang repositori jarak jauh. Jadi himpunan cabang jarak jauh mewakili keadaan repositori jarak jauh.

Cara biasa untuk memperbarui daftar cabang jauh adalah dengan menggunakan git fetch. Ini secara otomatis mendapatkan daftar cabang yang diperbarui dari jarak jauh dan mengatur cabang jarak jauh di repositori lokal, juga mengambil objek komit yang mungkin Anda lewatkan.

Namun, secara default, git fetchtidak menghapus cabang jarak jauh yang tidak lagi memiliki cabang mitra pada jarak jauh. Untuk melakukan itu, Anda harus memangkas daftar cabang jarak jauh secara eksplisit :

git fetch --prune

Ini secara otomatis akan menyingkirkan cabang jarak jauh yang tidak lagi ada di jarak jauh. Setelah itu, git branch -rakan muncul daftar cabang yang diperbarui yang benar-benar ada di remote: Dan yang bisa Anda hapus menggunakan git push.

Karena itu, untuk menggunakan git push --delete, Anda perlu menentukan nama cabang pada repositori jarak jauh; bukan nama cabang jarak jauh Anda. Jadi untuk menghapus cabang test(diwakili oleh cabang jarak jauh Anda origin/test), Anda akan menggunakan git push origin --delete test.

menyodok
sumber
Juga git branch -r | grep "origin"akan membantu proyek-proyek besar yang menggunakan garpu
Seraf
Jadi ada 2 alasan untuk mendapatkan pesan ini dari git: salah satu cabang sudah dihapus di server, atau Anda salah mengawali nama cabang dengan remotes/origin/. Atau keduanya.
Andrew Spencer
136

Arti dari itu remotes/origin/testadalah bahwa Anda memiliki cabang yang disebut testdi server jauh origin. Jadi perintahnya adalah

git push origin --delete test
Drosam
sumber
25

Ada pintasan untuk menghapus cabang di asalnya:

git push origin :<branch_name>

Yang sama dengan melakukan git push origin --delete <branch_name>

Ricardo Magalhães
sumber
13
  1. dapatkan daftar cabang jarak jauh
git fetch # synchronize with the server
git branch --remote # list remote branches
  1. Anda harus mendapatkan daftar cabang jarak jauh:
origin/HEAD -> origin/master
origin/develop
origin/master
origin/deleteme
  1. sekarang, kita dapat menghapus cabang:
git push origin --delete deleteme
MovGP0
sumber
11

git push origin --delete yourBranch

Matheus Marsiglio
sumber
4

Mengingat bahwa cabang jarak jauh adalah remote / asal / uji Anda dapat menggunakan dua cara:

git push origin --delete test

dan

git branch -D -r origin/test
Symeon Mattes
sumber
3

Saya mengikuti solusi dengan menyodok dengan sedikit penyesuaian pada akhirnya. Langkah saya ikuti
- git fetch --prune;
- git branch -amencetak berikut ini
    master
    branch
    remotes/origin/HEAD -> origin/master
    remotes/origin/master
    remotes/origin/branch(cabang jarak jauh untuk dihapus)
- git push origin --delete branch.
Di sini, cabang yang akan dihapus tidak bernama remotes/origin/branchtetapi sederhana branch. Dan cabang dihapus.

Yanqi Huang
sumber
+1 untuk komentar re: nama cabang, saya mencoba menghapus origin/branchkapan seharusnya branch.
ken
1

git branch -a akan mencantumkan cabang di lokal Anda dan bukan cabang di remote Anda.

Dan kesalahannya error: unable to delete 'remotes/origin/test': remote ref does not existberarti Anda tidak memiliki cabang dalam nama itu di remote Anda tetapi cabang itu ada di lokal Anda.


sumber
ini sangat membantu. itu menyelesaikan masalah hapus saya. saya bertanya-tanya mengapa 'git push --delete origin / test' tidak berfungsi, sementara "git push --delete test" bekerja
user10293779
1

Satu kalimat berguna untuk menghapus cabang selain 'master' dari asal:

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

Pastikan Anda memahami implikasi menjalankan ini sebelum melakukannya!

eddiewould
sumber
terima kasih untuk kode ini! ini adalah satu-satunya kode git yang saya uji bekerja menghapus semua cabang jarak jauh kecuali master.
Alvin
1

Bagi saya ini bekerja $ ▶ cabang git -D -r asal / mybranch

Detail

$ ▶ git branch -a | grep mybranch remote / origin / mybranch

$ ▶ git branch -r | ambil asal mybranch / mybranch

Cabang $ ▶ git mengembangkan * fitur / pra-penempatan

$ ▶ git push origin --delete mybranch error: tidak dapat menghapus 'mybranch': remote ref tidak ada kesalahan: gagal mendorong beberapa referensi ke '[email protected]: config / myrepo.git'

$ ▶ cabang git -D -r origin / mybranch Cabang asal yang dihapus / mybranch (adalah 62c7421).

$ ▶ git branch -a | ambil mybranch

$ ▶ git branch -r | ambil mybranch

Buggy B
sumber
-1
git push origin --delete origin/test 

harus bekerja juga

Sajal Choukse
sumber
2
Ini harusnya git push origin --delete test
Andreas Presthammer