Saya membuat tag pada cabang master yang disebut v0.1
seperti ini:
git tag -a v0.1
Tapi kemudian saya menyadari masih ada beberapa perubahan yang saya butuhkan untuk bergabung menjadi master untuk rilis 0.1, jadi saya melakukan itu. Tapi sekarang v0.1
tag saya macet (untuk memohon analogi post-it note) komit yang salah. Saya ingin itu terjebak pada komit terbaru pada master, tetapi sebaliknya terjebak pada komit terbaru kedua pada master.
Bagaimana saya bisa memindahkannya ke komit terbaru pada master?
git push origin :refs/tag/<tagname>
lalu lakukangit tag -fa <tagname>
kemudiangit push origin master --tags
. Kalau tidak, Anda mungkin berakhir dengan hal-hal aneh dalam daftar referensi pada remote dengan karakter ^ dan {} ditambahkan. Terima kasih kepada Dan di codebasehq.com untuk menunjukkan ini.:refs/tag/<tagname>
seharusnya:refs/tags/<tagname>
.git push -f origin <tagname>
Lebih tepatnya, Anda harus memaksa penambahan tag, lalu dorong dengan opsi --tags dan -f:
sumber
Untuk meringkas jika remote Anda dipanggil
origin
dan Anda bekerja dimaster
cabang:Anda juga dapat bertukar baris 4
git push origin --tags
untuk mendorong semua perubahan dengan tag dari perubahan lokal Anda.Mendasarkan pada @ stuart-golodetz, @ greg-hewgill, @eedeep, @ ben-hocking jawaban, komentar di bawah jawaban mereka dan komentar NateS di bawah jawaban saya.
sumber
Hapus dengan
git tag -d <tagname>
dan kemudian buat kembali di komit yang benar.sumber
Saya mencoba menghindari beberapa hal ketika menggunakan Git.
Menggunakan pengetahuan internal, misalnya ref / tag. Saya mencoba hanya menggunakan perintah Git yang didokumentasikan dan menghindari menggunakan hal-hal yang membutuhkan pengetahuan tentang isi internal direktori .git. (Artinya, saya memperlakukan Git sebagai pengguna Git dan bukan pengembang Git.)
Penggunaan kekuatan saat tidak diperlukan.
Hal-hal berlebihan. (Mendorong cabang dan / atau banyak tag, untuk mendapatkan satu tag di tempat yang saya inginkan.)
Jadi di sini adalah solusi non-kekerasan saya untuk mengubah tag, baik secara lokal maupun jarak jauh, tanpa sepengetahuan internal Git.
Saya menggunakannya ketika perbaikan perangkat lunak pada akhirnya memiliki masalah dan perlu diperbarui / dirilis ulang.
github
adalah nama sampel jarak jauh,fix123
adalah nama tag sampel, dan790a621265
sampel komit.sumber
Saya akan meninggalkan di sini hanya bentuk lain dari perintah ini yang sesuai dengan kebutuhan saya.
Ada tag
v0.0.1.2
yang ingin saya pindahkan.Lalu:
sumber
Satu cara lain:
Pindahkan tag dalam repo jarak jauh. (Ganti HEAD dengan yang lain jika perlu.)
Ambil perubahan kembali.
sumber
Alias untuk memindahkan satu tag ke komit yang berbeda.
Dalam sampel Anda, untuk bergerak melakukan dengan e2ea1639 hash lakukan:
git tagm v0.1 e2ea1639
.Untuk tag yang didorong, gunakan
git tagmp v0.1 e2ea1639
.Kedua alias membuat Anda mendapatkan tanggal dan pesan asli. Jika Anda menggunakan
git tag -d
Anda kehilangan pesan asli Anda.Simpan di
.gitconfig
file Andasumber
Jika Anda ingin memindahkan tag beranotasi, mengubah hanya komit yang ditargetkan tetapi mempertahankan pesan anotasi dan penggunaan metadata lainnya:
penggunaan: moveTag <tag-to-move> <target>
Fungsi di atas dikembangkan dengan merujuk teerapap / git-move-annotated-tag.sh .
sumber
git tag -f -a my_tag
sudah mempertahankan pesan dari pesan sebelumnya (dengan git versi 2.11.0).