TL; DR
Bunu, etiketinizi silerek ve tarihi ve yazarı sahtecilik yaparken yeniden oluşturarak yapabilirsiniz:
> git tag -d <tag-name>
> [GIT_COMMITTER_DATE=<original-commit-date>] \
> [GIT_AUTHOR_NAME=<original-author-name>] \
> git tag <tag-name> [commit]
Tüm hikaye:
Bina Sungram bireyin cevabı (aslında bir düzenleme olarak önerilen):
1. Kabul edilen cevap
Bu Andy ve Eric Hu'nun cevapları üzerinde bir gelişme . Yanıtları eski etiket nesnesine başvuran yeni bir etiket nesnesi oluşturacak ve her ikisi de aynı ada sahip olacak.
Bunu göstermek için aşağıdakileri göz önünde bulundurun:
> git tag tag1 tag1 -f -a # accepted answer
> git rev-list --objects -g --no-walk --all
[ example output: ]
6bdcc347fca041a5138f89fdf5276b3ebf9095d5
260ab7928d986472895b8c55e54569b3f3cb9517 tag1
a5797673f610914a45ef7ac051e3ee831a6e7c25 tag1
f22d6308c3cd330a3b0d86b9bf05562faf6b6f17
> git show tag1
tag tag1
Tagger: [tagger]
Date: [date of updated tag]
[Updated description]
tag tag1
Tagger: [tagger]
Date: [date of original tag]
[Original description]
[tagged commit details]
2. Sungram'ın gelişimi
Kullanılması <tag name>^{}
ikinci argüman olarak git tag
yerine aynı adla önceki tüm etiketlerini silecektir.
Önceki terminal oturumunun devamını düşünün:
> git tag tag1 tag1^{} -f -a # suggested improvement
> git rev-list --objects -g --no-walk --all
[ example output: ]
6bdcc347fca041a5138f89fdf5276b3ebf9095d5
75f02acacfd7d91d55b5bcfdfb1f00aebeed15e3 tag1
f22d6308c3cd330a3b0d86b9bf05562faf6b6f17
> git show tag1
tag tag1
Tagger: [tagger]
Date: [date of updated tag]
[Updated description]
[tagged commit details]
3. Tarihi kaydedin
Son olarak, orijinal etiketin tarihini güncellenen etiketin tarihi olarak tutmak istiyorsanız, biraz awk (veya benzeri) bir sihir kullanın veya bunun yerine istediğiniz tarihi yapıştırın. Aşağıdaki bir olan yedek (Aksi orijinal tarih nedeniyle geçersiz kılma için kaybedilecek) ikinci örneğin:
> GIT_COMMITTER_DATE="$(git show tag1 | # get info about the tag cascade including the date original of the original tag
> awk '{
> if ($1 == "Date:") {
> print substr($0, index($0,$3))
> }
> }' | # extract all the dates from the info
> tail -2 | head -1)" `# get the second to last date, as the last one is the commit date` \
> git tag tag1 tag1^{} -a -f # finally, update the tag message, but save the date of the old one
>
> git rev-list --objects -g --no-walk --all
6bdcc347fca041a5138f89fdf5276b3ebf9095d5
e18c178f2a548b37799b100ab90ca785af1fede0 tag1
f22d6308c3cd330a3b0d86b9bf05562faf6b6f17
> git show tag1
tag tag1
Tagger: [tagger]
Date: [date of original tag]
[Updated description]
[tagged commit details]
Referanslar:
4. DIY
Alternatif olarak, etiketleri güncellemek için bunları silebilir ve tekrar oluşturabilirsiniz. Güncellemenin yeni bir etiket eklediği ve eskisine işaret ettiği veya alternatif olarak eskisinin örtük olarak silinip yine de aynı taahhüdü işaret etmek için yeni bir etiket oluşturduğu ortaya çıkıyor.
Bunu aşağıdakileri yaparak yapabilirsiniz:
> git tag -d <tag-name>
> [GIT_COMMITTER_DATE=<original-commit-date>] \
> [GIT_AUTHOR_NAME=<original-author-name>] \
> git tag <tag-name> [commit]
İşte [optional]
isteğe bağlı bir alan; <required>
Zorunlu bir alandır. Tabii ki, git tag
normalde yapacağınız komuttan sonra herhangi bir bayrak ekleyebilirsiniz .
git tag -m "A message" --edit v1.0
şey yeterli olacaktır. Aşağıdaki cevabımı