Git'te eski bir işlem nasıl etiketlenir?


949

Git için yeniyiz ve depomuzun başında bir etiket ayarlamak istiyorum. Üretim kodumuz başlangıç ​​deposu ile aynı, ancak o zamandan beri taahhütte bulunduk. Başlangıçta bir etiket, üretimi bilinen ve istikrarlı bir duruma "geri almamıza" izin verir.

Peki, keyfi, eski bir taahhüde nasıl etiket eklenir?


Buraya eski bir etiketi yerel olarak ve uzaktan kumandadan silme konusunda yardım aramaya geldim ve sonunda bunu yararlı buldum, belki de başka birine de yardımcı olacak: gist.github.com/mobilemind/7883996
Aleksander Lidtke 15:18

1
Git'i kullanarak bir etiketi uzaktaki bir depoya nasıl aktaracağınızı unutmayın. çünkü Git özel bir şey yapmadan bir etiketi zorlamaz.
jww

Taahhüt karmasını kullanarak eski işlemlere bir etiket ekleyebilirsiniz. İşte sözdizimi: git tag -a <tagName> -m "tag message" <commit hash> Daha temelden ileriye doğru, abhisheksharma.online/git-tags
Abhishek Sharma

Yanıtlar:


1510

Misal:

git tag -a v1.2 9fceb02 -m "Message here"

9fceb02Taahhüt kimliğinin başlangıç ​​kısmı nerede .

Daha sonra etiketi kullanarak itebilirsiniz git push origin v1.2.

git logGeçerli dalınızdaki tüm taahhüt kimliklerini göstermek için yapabilirsiniz .

Pro Git kitabında etiketleme konusunda da iyi bir bölüm var .

Uyarı: Bu, geçerli tarihe sahip etiketler oluşturur (ve bu değer, örneğin GitHub sürümleri sayfasında gösterilecek değerdir). Etiketin bitiş tarihiyle tarihlendirilmesini istiyorsanız, lütfen başka bir cevaba bakın .


45
Bunu gitk'teki sağ tıklama menüsünde de yapabilirsiniz - SHA1'i bu şekilde buluyorsanız uygun.
Cascabel

62
Bir mesaj eklemek istemiyorsanız -ave -m "Message here"parçalarını atlayın :git tag v1.2 9fceb02
devius

3
Tam taahhüt kimliğini de kullanabilirsiniz.
j08lue

1
@devius -ave ile arasındaki fark nedir -m? Man sayfasının kullanıldığında -aima edildiği anlaşılıyor -m.
John Strood

7
git push --tags origin masteryerel şubedeki tüm etiketleri uzaktan kumandaya gönderir. git push origin <tag_name>Sadece oluşturulan etiketi itmeyi tercih edin. Bakınız: stackoverflow.com/a/5195913/452708 , git-scm.com/book/en/v2/Git-Basics-Tagging
Abhijeet

144

Sadece Kod

# Set the HEAD to the old commit that we want to tag
git checkout 9fceb02

# temporarily set the date to the date of the HEAD commit, and add the tag
GIT_COMMITTER_DATE="$(git show --format=%aD | head -1)" \
git tag -a v1.2 -m"v1.2"

# set HEAD back to whatever you want it to be
git checkout master

ayrıntılar

@Dkinzer tarafından verilen cevap , taahhüt tarihi değil , tarihi geçerli tarih olan ( git tagkomutu çalıştırdığınızda ) etiketler oluşturur . Git yardımında "Backdating Etiketleri Hakkında" adlı bir bölüm vardır :tag

Başka bir VCS'den bazı değişiklikleri içe aktardıysanız ve çalışmanızın önemli sürümleri için etiket eklemek istiyorsanız, etiket nesnesinin içine gömülecek tarihi belirtebilirsiniz; tag nesnesindeki bu tür veriler, örneğin gitweb arabirimindeki etiketlerin sırasını etkiler.

Gelecekteki etiket nesnelerinde kullanılacak tarihi ayarlamak için ortam değişkenini ayarlayın GIT_COMMITTER_DATE(olası değerlerin sonraki tartışmasına bakın; en yaygın biçim "YYYY-AA-GG SS: DD").

Örneğin:

$ GIT_COMMITTER_DATE="2006-10-02 10:31" git tag -s v1.0.1

"Git'te Nasıl Etiketlenir?" Sayfası , HEAD işleminin zamanını şu yolla çıkarabileceğimizi gösterir:

git show --format=%aD  | head -1
#=> Wed, 12 Feb 2014 12:36:47 -0700

Belirli bir taahhüt tarihini şu yolla çıkarabiliriz:

GIT_COMMITTER_DATE="$(git show 9fceb02 --format=%aD | head -1)" \
git tag -a v1.2 9fceb02 -m "v1.2"

Bununla birlikte, taahhüdü iki kez tekrarlamak yerine, HEAD'ı bu taahhüde değiştirmek ve her iki komutta dolaylı olarak kullanmak daha kolaydır:

git checkout 9fceb02 

GIT_COMMITTER_DATE="$(git show --format=%aD | head -1)" git tag -a v1.2 -m "v1.2"

4
@ColonelPanic, dileğin benim emrimdir! github.com/lucasrangit/git-custom-commands/blob/master/…
Lucas

Sürümleri yönetmek ve projenizin / etiketleri sayfasında gösterilen tarihi önemsemek için Github kullanıyorsanız, GIT_COMMITTER_DATE değerini ayarlamak özellikle önemlidir!
Lesley

2
@ColonelPanic Size pun için bir oy verdim ve kod için ikinci bir tane verebilseydim, ama bir github yıldızı yapmak zorunda kalacak.
andyhasit

96

Bunu yapmanın en basit yolu:

git tag v1.0.0 f4ba1fc

ile f4ba1fcetiketine istediğiniz taahhüt ait karma başlangıcı olma ve v1.0.0etikete istediğiniz sürümü olma.


Mükemmel teşekkürler :).
Saleh Enam Shohag


36

Tamam , şunları yapabilirsiniz:

git tag -a <tag> <commit-hash>

Taahhüt etmek için etiket: 1.0.2 eklemek istiyorsanız e50f795, yapmanız yeterlidir:

git tag -a 1.0.2 e50f795

Ayrıca , sonuna , şöyle bir şey kullanarak bir mesaj eklersiniz-m :

git tag -a 1.0.2 e50f795 -m "my message"

Sonuçta, bunu yapmak için itmeniz gerekir remote:

git push origin 1.0.2 

Bunlardan tek tek bahsetmek istemediğiniz birçok etiketiniz varsa, şunları yapmanız yeterlidir:

git push origin --tags

tüm etiketleri bir araya getirmek için ...

Ayrıca, adımların daha fazla açıklanması için aşağıdaki görüntüdeki adımları oluşturdum: Bir kesin karmada etiket oluşturma

Ayrıca etiketi dd olabilir Hub veya benzeri araçları kullanarak SourceTree önceki adımları önlemek için, benim için, giriş yapmış Bitbucket bu durumda ve oradan yapıyor:

  1. Şubenize gidin ve etiketi eklemek istediğiniz taahhüdü bulun ve tıklayın:

Bitbucket'te taahhüdünü bul

  1. In sayfayı işlemek , yazan yere sağ tarafta, bulmak No tagsve üzerine tıklayın +simgesi:

nerede olduğunu bul etiket yok

  1. Etiket adı kutusuna etiketinizi ekleyin:

etiket adı ekle

  1. Şimdi etiketin başarıyla oluşturulduğunu görüyorsunuz:

resim açıklamasını buraya girin


11

Bu eski bir soru ve cevaplar zaten tüm çalışmalara verildi, ancak dikkate alınabilecek yeni bir seçenek de var.

Git depolarınızı yönetmek için SourceTree kullanıyorsanız, herhangi bir taahhüdü sağ tıklatıp buna bir etiket ekleyebilirsiniz. Başka bir fare tıklamasıyla etiketi doğrudan başlangıçtaki şubeye de gönderebilirsiniz.


6

Diğerlerinin cevaplarına dayanarak, burada etiket tarihini gerçekte ne zamana ayarlayan, ek açıklamalı etiket kullanan ve hayır gerektiren tek katmanlı bir çözüm var git checkout:

tag="v0.1.3" commit="8f33a878" bash -c 'GIT_COMMITTER_DATE="$(git show --format=%aD $commit)" git tag -a $tag -m $tag $commit'
git push --tags origin master

burada tagistenen etiket dizesine ve committamamlama karmasına ayarlanır .


3

Cevap @Phrogz tarafından harika ama Windows üzerinde çalışmaz. Eski bir taahhüdü Powershell kullanarak taahhüdün orijinal tarihi ile nasıl etiketleyeceğiniz aşağıda açıklanmıştır:

git checkout 9fceb02
$env:GIT_COMMITTER_DATE = git show --format=%aD | Select -First 1
git tag v1.2
git checkout master
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.