git push cabang lokal dengan nama yang sama dengan tag jarak jauh

110

Saya mencoba mendorong cabang lokal baru product-0.2ke jarak jauh di mana sudah ada tag dengan nama yang sama (tetapi cabang itu sendiri tidak ada)

git push -v --tags --set-upstream origin product-0.2:product-0.2 
Pushing to https://****@github.com/mycompany/product.git
error: src refspec product-0.2 matches more than one.
error: failed to push some refs to 'https://****@github.com/mycompany/product.git'

Sama dengan:

git push origin product-0.2:/refs/heads/product-0.2 

Meskipun cara lain bekerja, misalnya membuat cabang product-0.1, komit di atasnya lalu terapkan tag product-0.1.

Beberapa orang mengatasinya dengan menghapus tag yang bentrok secara lokal, lalu mendorong cabang, lalu mengambil tag jarak jauh, tetapi tampaknya rumit dan rawan kesalahan.

Bagaimana saya bisa membuat cabang saya dengan sedikit keributan?

Terima kasih atas masukan Anda

Andai
sumber
1
Coba refs/heads/product-0.2:refs/heads/product-0.2, yaitu tanpa garis miring, dan juga memberikan refspec penuh di sisi lokal.
rajutan
Dapat mencoba git push origin product-0.2: product-0.2
vpatil

Jawaban:

162

Perintah berikut harus berfungsi.

git push origin refs/heads/product-0.2:refs/heads/product-0.2 
ralphtheninja
sumber
16
Jawaban yang diterima, ini adalah cara untuk menghilangkan keraguan. Namun, jauh lebih mudah untuk tidak memiliki tag dan cabang dengan nama yang sama sejak awal. Beberapa alat (misalnya SourceTree) akan tersandung di atasnya dan Anda akan diserahkan ke perangkat Anda sendiri, dengan baris perintah sebagai satu-satunya solusi. Terima kasih kawan!
youri
2
+1. Hal serupa bekerja ketika Anda perlu membedakan nama jarak jauh:refs/remotes/remote_name/remote_branch
Kelvin
1
masterTanpa sadar menamai rilis yang diberi tag dan tidak bisa lagi mendorong ke cabang dengan nama yang sama. git push origin refs/heads/mastermelakukan trik (lalu saya menghapus tag itu sehingga berhenti terjadi).
tresf
Selain dari praktik terbaik, Anda masih tidak dapat mendorong cabang yang Anda coba dorong sebagai cabang default .. Bagaimana kita bisa mengatasinya?
Baksteen
Jika solusi di atas tidak berhasil, lakukan setelah melepas remote head. git push origin --delete ref / kepala / BRANCHNAME
alones
42

Verifikasi tag apa yang terkait dengan cabang Anda:

git tag

Dalam kasus saya, saya memiliki tag dengan nama cabang yang sama. Berhasil menghapusnya:

git tag -d [tag-name]
ecairol
sumber
1
Bekerja dengan baik, memiliki tag dengan nama yang sama dengan cabang saya.
ChanceVI
20

Ubah nama.

Apakah Anda melakukannya secara lokal atau jarak jauh, ubah saja namanya.

Sebuah tag dan sebuah cabang pada dasarnya adalah hal yang sama di git: mereka merepresentasikan sebuah pointer ke sebuah komit. Perbedaannya adalah bahwa penunjuk cabang maju saat Anda membuat komit, sementara tag tetap statis.

Namun , Anda dapat melakukan git checkoutpada salah satu cabang atau tag. Mengapa Anda bertarung dengan semua nama yang digandakan ini? Ubah mereka.

TheBuzzSaw
sumber
Seharusnya / bisa memanggil tag product-0.2.0dengan digit terakhir untuk 'tingkat tambalan' tetapi tetap saja, kami memiliki konvensi penamaan di tempat dan kami tidak mengalami masalah di masa lalu ketika cabang dibuat sebelum tag.
youri
Jika tim sudah mulai menggunakan cabang, bukankah akan tepat untuk mengganti namanya?
svassr
Ubah nama entitas yang belum Anda dorong.
TheBuzzSaw
Apakah Anda yakin tentang @TheBuzzSaw ini? Karena secara lokal saya dapat memiliki keduanya dengan nama yang sama, sebagai benda yang berbeda.
John John Pichler
1
Sementara perintah (sebagai jawaban yang dipilih) di atas mungkin telah menyelesaikan pertanyaan - karena baru mengenal git, saya tidak mengerti pertanyaan maupun jawabannya. Jawaban INI setidaknya memberikan a) nasihat dan b) penjelasan - bahkan rekomendasi untuk masa depan. Saya akan mempertimbangkan untuk menanyakan pertanyaan saya sendiri, tetapi saya bosan dengan komentar seperti yang sudah ditanyakan sebelumnya - imho: pertanyaan yang tidak bisa dimengerti tidak sama dengan pertanyaan pemula. Tapi itulah hidup;)
Michael Felt
15

Jika Anda mencoba memasukkan tag yang memiliki nama cabang yang sama:

git push origin tag myTag
Paulo Merson
sumber
3
Bagus Pak! ini harus menjadi jawaban yang diterima. selalu membaca jawaban SO ekor panjang
louis_guitton
Ini berguna untuk mengetahui, tetapi tidak menjawab pertanyaan itu sama sekali. Saya tidak akan meremehkannya, karena penulis menekankan bahwa itu sebaliknya, tetapi hampir tidak dapat diterima sebagai jawabannya.
Peter Halverson
12

Saya mencoba mengirim ke repositori kanonik pagi ini dan mendapatkan kesalahan berikut:

$ git push origin master
error: src refspec master matches more than one.
error: failed to push some refs to 'ssh://user@host/srv/git/repo'

Ini terjadi karena saya tidak sengaja membuat tag master secara lokal:

$ git tag
master
tag1
tag2
tag3
tag4

Setelah saya menghapus tag ini secara lokal:

git tag -d master

Saya bisa mendorong lagi.

Jasbeer Rawal
sumber
Penjelasan yang bagus. Perlu menghapus tag lokal. Terima kasih!
Chef Pharaoh
5

Ini gagal:

git push $origin $branch:$branch 

Sementara ini berhasil untuk saya:

git checkout $branch
git push $origin HEAD:$branch
RzR
sumber
1

Jika Anda menggunakan pohon sumber, ikuti langkah-langkah berikut.

  1. temukan nama Tag cabang di bagian tag
  2. klik pada Tag name delete tag.
  3. Pastikan Anda mencentang "hapus tag dari jarak jauh" dan klik ok

Coba lagi untuk mendorong perubahan Anda. sekarang ini akan berhasil.

Muhammad Bilal
sumber