Kami memiliki beberapa tag beranotasi di repositori git kami. Tag yang lebih lama memiliki pesan palsu yang ingin kami perbarui dengan gaya baru kami.
% git tag -n1
v1.0 message
v1.1 message
v1.2 message
v2.0 Version 2.0 built on 15 October 2011.
Dalam contoh ini, kami ingin membuat pesan v1.x terlihat seperti pesan v2.0. Adakah yang tahu bagaimana kita akan melakukan ini?
git tag -m "A message" --edit v1.0
akan cukup. Lihat jawaban saya di bawah inifatal: tag 'v6.6.2' already exists
menggunakan2.17.0
.Jawaban:
git tag <tag name> <tag name>^{} -f -m "<new message>"
Ini akan membuat tag baru dengan nama yang sama (dengan menimpa aslinya).
sumber
git tag --help
.git tag <tag name> <tag name> -f -m "<new message>" -m "<new message>" -m "<new message>"
<tag name>^{}
ketika Anda ingin menggantiold tag
Untuk memperbarui pesan yang kompleks, cukup tentukan opsi tag beranotasi dengan
-a
atau opsi tag yang ditandatangani dengan-s
:Ini akan membuka editor dengan isi pesan tag lama Anda .
sumber
git tag <tag name> <tag name>^{} -f -a
Ini merupakan peningkatan: tanpa
^{}
itu akan membuat objek tag baru yang mereferensikan objek tag lama, di mana keduanya akan memiliki nama tag yang sama.<tag name>^{}
akan menyelesaikan tag / referensi hingga menemukan hash komit pertama.sumber
usage: git tag [-a|-s|-u <key-id>] [-f] [-m <msg>|-F <file>] <tagname> [<head>]
TL; DR
Anda dapat melakukan ini dengan menghapus tag dan membuatnya kembali sambil mem-spoof tanggal dan pembuat:
Seluruh cerita:
Membangun jawaban Sungram (awalnya diusulkan sebagai suntingan):
1. Jawaban yang diterima
Ini merupakan peningkatan dari jawaban Andy dan Eric Hu . Jawaban mereka akan membuat objek tag baru yang mereferensikan objek tag lama dan keduanya akan memiliki nama yang sama.
Untuk menggambarkan hal ini, pertimbangkan hal berikut:
2. Peningkatan Sungram
Menggunakan
<tag name>^{}
argumen keduagit tag
sebagai gantinya akan menghapus semua tag sebelumnya dengan nama yang sama.Pertimbangkan kelanjutan sesi terminal sebelumnya:
3. Simpan tanggal
Terakhir, jika Anda ingin menyimpan tanggal dari tag asli sebagai tanggal dari tag yang diperbarui, gunakan beberapa sihir awk (atau sejenisnya) atau cukup tempel tanggal yang Anda inginkan. Berikut ini adalah pengganti untuk contoh kedua (jika tidak, tanggal asli akan hilang karena ditimpa):
Referensi:
SO: Objek daftar cepat di database git
SO: Ubah tanggal committer dari tag git
Awk: Tutorial dan pengantar
SO: Filter output dengan token-of-line pertama dan ekstrak rest-of-line dengan awk
SO: Cara menempatkan komentar bash line dalam perintah multi-line
4. DIY
Atau untuk memperbarui tag, Anda bisa menghapusnya dan membuatnya lagi. Ternyata memperbarui hanya menambahkan tag baru dan membuatnya menunjuk ke yang lama, atau secara alternatif, hanya menghapus yang lama dan membuat yang baru untuk menunjuk ke komit yang sama pula.
Anda dapat mencapai ini dengan menerbitkan:
Ini
[optional]
adalah bidang opsional;<required>
adalah bidang wajib diisi. Tentu saja, Anda dapat menambahkan bendera apa pun setelahgit tag
perintah yang biasanya Anda lakukan.sumber
The tagger is controlled by the committer info. (...) GIT_COMMITTER_{NAME,EMAIL}. A tagger isn't really an author.
Solusi @Andy
adalah salah . Setelah itu, dengan
perintah, kita akan melihat tumpukan tag dengan nama yang sama.
Itu menambahkan tag baru dengan nama tag yang sama dan pesan baru di komit
<tag-name>
. Tapi itu tidak menghapus tag lama. Ini adalah kasus khusus dari perintah ini:Tapi
<old-tag>
sama saja dengan<tag-name>
.Solusi yang benar sederhana, hanya perbarui tag yang OK.
Ingat, hanya SATU di sini.
Jika kita ingin mengganti tag, yang bukan
HEAD
, kita perlu<commit>
argumen tambahan .sumber
git show <tag>
dan melihat semua edisi sebelumnya.HEAD
, melewati ekstra<commit>
, tag yang dibuka kosong. Saya berharap tag lama hanya diedit. Apakah ada jalannya?git tag <commit> <tag-name> -f -a
telah <commit> dan <tag-name> terbalik? Ini terlihat seperti ini ketika membandingkan dengan jawaban dan dokumen lain, tapi saya bukan ahli.Dengan Git 2.17 (Q2 2018), akan ada alternatif untuk membuat tag baru dengan
git tag <tag name> <tag name> -f -m "<new message>"
, "git tag
" mempelajari opsi eksplisit "--edit
" yang memungkinkan pesan yang diberikan melalui "-m
" dan "-F
" diedit lebih lanjut.Lihat komit 9eed6e4 (06 Feb 2018) oleh Nicolas Morey-Chaisemartin (
nmorey
) .(Digabung oleh Junio C Hamano -
gitster
- di commit 05d290e , 06 Mar 2018)Tambahkan
--edit
opsi yang memungkinkan Anda memodifikasi pesan yang disediakan oleh-m
atau-F
, dengan cara yang samagit commit --edit
.sumber
--edit
alamat OP?-f
bendera ditambahkan juga maka--edit
akan mengedit pesan dan memodifikasi stempel waktu, kan?Anda harus menandai lagi, menggunakan
-f
bendera gaya.sumber
Menggunakan jawaban di atas, ini adalah alias untuk saya satu-liner
.gitconfig
. Mengganti tag yang ada dan mempertahankan tanggal komit.Perbaikan?
sumber
tag-amend = "!sh -c 'f() { name=$(git log -1 --format=%an $0); email=$(git log -1 --format=%ae $0); date=$(git log -1 --format=%ci $0); GIT_AUTHOR_NAME=\"${name}\" GIT_COMMITTER _NAME=\"${name}\" GIT_AUTHOR_EMAIL=\"${email}\" GIT_COMMITTER_EMAIL=\"${email}\" GIT_AUTHOR_DATE=\"${date}\" GIT_COMMITTER_DATE=\"${date}\" git tag -f -a $0 $0^{}; }; f '"
Jika Anda menggunakan GUI seperti smartgit saja
sumber