2010-08-04 26 views
122

Şu anda hangi etiketin teslim alınmış olduğunu bulmakta sorun yaşıyorum.Hangi git etiketini gösterdiniz?

yapmam Ne zaman:

git checkout tag1 
git branch 

ben çıkıyorum hangi etiketi öğrenmek için görünmüyor olabilir. Sadece günlükler:

* (no branch) 
master 

Hangi etiketlerin teslim alındığını bulmak mümkün mü? Yukarıdaki örnekte, bu tag1 olacaktır.

cevap

196

Edit: Jakub Narębski'de daha fazla git-fu var. Aşağıdaki çok daha basit komut mükemmel çalışıyor:

git describe --tags 

(Yoksa açıklamalı etiketi göz atmış Etiketim hafiftir, bu yüzden --tags ihtiyacım --tags olmadan..)

orijinal cevap şu: daha fazla git-fu ile

git describe --exact-match --tags $(git log -n1 --pretty='%h') 

Birisi daha zarif bir çözüm olabilir ...

Bu, git-log'un, teslim aldığınızdan başlayarak günlüğü bildirdiği gerçeğinden yararlanır. %h kısaltılmış hash'ı yazdırır. Sonra git describe --exact-match --tags, bu işleme tam olarak uyan etiketi (hafif veya açıklamalı) bulur. Yukarıdaki $() sözdizimi, bash veya benzerlerini kullandığınızı varsayar.

+12

veya - -g '' değilse, ', ' den beri işlem sayısıdır. –

+1

@Jakub - Teşekkürler. Yorumunuzdan önce cevaplama saniyelerime 'exact-match' ekledim. Bunu kaldırabileceğinizi bilmek güzel ve yine de daha iyi bilgi almak için fuzzier girişinden iyi bir bilgi edinebilirsiniz. – bstpierre

+0

Teşekkürler, tam olarak aradığım şey buydu. Btw, hatta git-tarif --exact-match (--tags olmadan) benim için çalışır. – grm

18

Bir etikete göz attığınızda, "detached head" adı verilen bir şeye sahip olursunuz. Normalde, Git'in HEAD işlemi, şu anda kontrol ettiğiniz şubeye bir göstericidir. Ancak, bir yerel şubeden başka bir şeye (örneğin bir etiket veya uzak bir şube) bakarsanız, "bağımsız bir kafa" a sahip olursunuz - gerçekten herhangi bir dalda değilsiniz. Ayrılmış bir kafada herhangi bir taahhütte bulunmamalısınız.

Düzenleme yapmak istemiyorsanız bir etikete başvurmak doğru değildir. Dosya içeriğini incelemeniz ya da projenizi bir etiketten oluşturmak istiyorsanız, git checkout my_tag numaralı telefona başvurmanız yeterlidir ve numaralı herhangi bir taahhütte bulunmadığınız sürece dosyaları ile çalışabilirsiniz. Dosyaları değiştirerek başlamak istiyorsanız, etikete dayanan bir şube oluşturmalıdır:

$ git checkout -b my_tag_branch my_tag 

my_tag başlayarak my_tag_branch adlı yeni şube yaratacaktır. Bu dalda değişiklik yapmak güvenlidir.

18

git describe kaçınmalısınız bir porcelain komut şöyledir:

http://git-blame.blogspot.com/2013/06/checking-current-branch-programatically.html

Bunun yerine, kullandı:

git name-rev --tags --name-only $(git rev-parse HEAD) 
+5

"undefined" döndürüyor – Stranger

+3

Bu, etiketlere karşılık gelen işler için '^ 0 'çıktısı veriyor (ör.' 1.0' etiketi için 1.0^0' çıktılar). Git çıktısının sadece 1.0 'olması ya da bunun için sed kullanmamın bir yolu var mı? –

+0

@DanielSerodio bu, bash ile bash benim için çalıştı: 'name name-rev --tags - sadece isim $ (git rev-parse HEAD) | sed 's | \ ([^ \ ^] * \) \ (\^0 \) $ | \ 1 | g'' – hobs

7

git log --decorate

Bu ref işaret ne söyleyecektir Şu anda kontrol dışı taahhüt.

24

Bu benim için git describe --tags --abbrev=0

+1

Sadece çalıştı! teşekkürler –

+0

Evet. Bu, tam olarak bu etikette olmasanız bile çalışır! :) –

+2

Uhhh. ... Etiketten sonra hash üç taahhütlerini kontrol ederseniz, "o etikette" değilsiniz. Size teslim edilen taahhütten önceki veya son etiketini bildirir. Yani bu yanlış. – ingyhere

17

göster geçerli HEAD tüm etiketler çalıştı (veya taahhüt) Sadece tam olarak üzerinde (açıklamalı) etiketi varsa git describe` etiket adını gösterecektir `kullanılarak

git tag --points-at HEAD 
+0

Bu komutun, sonuç boş kalsa bile komut satırında bir hata bildirmediğini unutmayın. Hata? Bu konumda birden çok etiket varsa, bir liste de döndürür. Bu en iyi cevaptır, ancak yazanlar bu uyarıları akılda tutarak dikkatli davranmalıdır. – ingyhere