Pertanyaan git dorong cabang lokal dengan nama yang sama dengan tag jarak jauh


Saya mencoba untuk mendorong cabang lokal baru product-0.2 ke remote 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 sebaliknya bekerja, mis. buat cabang product-0.1, Komit di atasnya kemudian menerapkan tag product-0.1.

Beberapa orang mengatasi ini dengan menghapus tag yang bertentangan secara lokal, lalu tekan cabang, lalu ambil tag jarak jauh, tetapi tampaknya rumit dan rawan kesalahan.

Bagaimana saya bisa membuat cabang saya dengan sedikit keributan?

Terima kasih atas masukan Anda


75
2018-02-21 13:54


asal


Jawaban:


Perintah berikut seharusnya berfungsi.

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

113
2018-02-21 17:38



Verifikasi tag apa yang terkait dengan cabang Anda:

git tag

Dalam kasus saya, saya memiliki tag dengan nama cabang yang sama. Menghapusnya berhasil:

git tag -d [tag-name]

21
2018-04-17 16:09



Ubah nama.

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

Tag dan cabang pada dasarnya sama dengan git: mereka menunjukkan pointer ke komit. Perbedaannya adalah bahwa penunjuk cabang maju saat Anda melakukan commit, sementara tag tetap statis.

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


14
2018-02-21 17:44



Saya mencoba untuk mendorong 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 induk secara lokal:

$ git tag
master
tag1
tag2
tag3
tag4

Setelah saya menghapus tag ini secara lokal:

git tag -d master

Saya bisa mendorong lagi.


7
2018-06-01 06:19



Ini gagal:

git push $origin $branch:$branch 

Sementara ini berhasil untuk saya:

git checkout $branch
git push $origin HEAD:$branch

4
2018-01-29 14:22