Hangi git etiketinde olduğunuzu göster?


216

Şu anda hangi etiketin kullanıma alındığını bulmakta sorun yaşıyorum.

Ben yaparken:

git checkout tag1
git branch

Hangi etikette olduğumu bulamıyorum. Yalnızca günlüğe kaydeder:

* (no branch)
master

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

Yanıtlar:


326

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

git describe --tags

(Veya --tagsek açıklamalı bir etiketi kontrol ettiyseniz. Etiketim hafif, bu yüzden --tags'e ihtiyacım var.)

orijinal cevap aşağıdaki gibidir:

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

Daha git-fu'ya sahip biri daha zarif bir çözüme sahip olabilir ...

Bu git-log, günlüğü teslim aldığınızdan başlayarak rapor eden olguyu kullanır . %hkısaltılmış karmayı yazdırır. Ardından git describe --exact-match --tags, bu taahhütle tam olarak eşleşen etiketi (hafif veya ek açıklamalı) bulur.

Yukarıdaki $()sözdizimi bash veya benzeri kullandığınızı varsayar.


22
Sadece kullanarak git describesize (açıklamalı) etiketinde tam olarak veya eğer etiket adını gösterecektir <tag>-<n>-g<shortened sha-1>değilse, nereye <n>kaydedilmesini sayısı beri olduğunu <tag>.
Jakub Narębski

1
@ Jakub - Teşekkürler. --exact-matchYorumunuza geçmeden saniye önce cevabımı ekledim . Bunu kaldırabileceğinizi ve daha bulanık girişlerden iyi bilgiler alabileceğinizi bilmek güzel.
bstpierre

Teşekkürler, tam da aradığım şey buydu. Btw, git-define --exact-match (--tags olmadan) benim için çalışıyor.
grm

3
Kullanmak ... ' git rev-parse HEADdan daha iyi bir çözümdür, git log -n1 --pretty='%h'ama neden sadece HEAD varsayılan HEADolarak yazamazsınız (ya da hiçbir şey git describe)?
Jakub Narębski

sadece Guybrush porselen nefret ediyor
vdegenne

71

Bu benim için çalıştı git describe --tags --abbrev=0


2
Evet. tam olarak bu etikette olmasanız bile bu işe yarar! :)
Martin Muzatko

13
Uhhh. ... Etiketten sonra üç karmayı tamamlarsanız, "o etikette" olmazsınız. Teslim edilen işlemden önceki veya teslim edilen son etiketi size bildirir. Yani bu yanlış.
ingyhere

Windows'da da çalışıyor :)
cowlinator

51

Geçerli HEAD'deki (veya çalışmadaki) tüm etiketleri göster

git tag --points-at HEAD

1
Sonuç boş olsa bile bu komutun komut satırında bir hata bildirmediğini unutmayın. Hata? Ayrıca, bu konumda birden fazla etiket varsa bir liste döndürür. En iyi yanıt budur ancak senaryo yazarları bu uyarıları akılda tutarak dikkatli olmalıdır.
ingyhere

@ İngyhere'nin yorumunu takip ediyor. Evet, bir hatası olmadığı iyi bir bilgidir ve insanların sonucu buna göre ele alması gerekir. Ama buna böcek demem. Benim durumum için, "etiket yoksa boş" geçerlidir. Diğer durumlarda, bir kişi bir değişkeni kaydedebilir ve boş olup olmadığını kontrol edebilir (bash talimatlarına bağlantı)
driftcatcher

23

git describekaçınmanız gereken bir porselen komutudur:

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

Bunun yerine kullandım:

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

11
"Undefined" döndürüyor
Stranger

4
Bu ^0, etiketlere karşılık gelen (örneğin 1.0çıktısı aldığı etiket için 1.0^0) işlemlerin bir izini çıkarır . Yalnızca Git çıktısı almanın herhangi bir yolu var mı yoksa 1.0bunun için sed kullanmalı mıyım?
Daniel Serodio

13
Sadece bazı kavramsal nitpicking: Sanırım porselen ve sıhhi tesisat anlamlarını tersine çevirdiniz. Porselen kullanmak uygun, yüksek seviye ve normal kullanım içindir . Sıhhi tesisat içseldir (adından da anlaşılacağı gibi) ve sadece git geliştiricileri uyarı yapmadan argümanlarını ve çıktılarını değiştirme hakkını saklı tuttukları için önerilmez. Yani ilk öneriniz aslında biraz daha uygun.
Leo Antunes

5
Bağlantılı makalede "git branch" kullanmaktan kaçınıldığından, bu kullanım durumu için çalışmadığı belirtiliyor. Git açıklamasını kullanmaktan kaçınmak için iyi bir neden düşünemiyorum. Leo'nun dediği gibi, "Porselen" komutları genellikle kullanmanız gereken komutlardır. Ne yaptığınızı gerçekten bilmiyorsanız sıhhi tesisat komutlarından kaçının. "git description" harika çalışıyor.
Danny

4
"Porselen" komutları kullanmamanız gereken komutlar, kaçınmanız gereken komutlar değil. Çıktıları makine tarafından okunabilen ve gelecekteki sürümlerde değişmeyecek olan komutlardır, bu nedenle komut dosyalarında vb. Güvenilebilir. Porselen olmayan komutlar daha fazla insan tarafından okunabilir çıktı üretme eğilimindedir, ancak gelecekteki sürümlerde daha fazla yapmak için değişebilir. önemli bir şey gerçekten değiştiği için okunabilir değil.
rjmunro

22

Bir etikete göz attığınızda, "müstakil kafa" denilen şeye sahipsiniz . Normalde Git'in HEAD taahhüdü, şu anda teslim aldığınız dalın bir göstergesidir. Ancak, yerel bir şubeden (örneğin, bir etiket veya uzak bir dal) başka bir şeye göz atarsanız, "müstakil bir başınız" vardır - gerçekten herhangi bir dalda değilsiniz. Ayrılmış bir kafadayken herhangi bir taahhütte bulunmamalısınız.

Herhangi bir düzenleme yapmak istemiyorsanız bir etikete göz atmanız uygundur. Yalnızca dosyaların içeriğini inceliyorsanız veya projenizi bir etiketten oluşturmak istiyorsanız, taahhütte bulunmadığınız sürecegit checkout my_tag dosyalar için uygundur ve dosyalarla çalışabilirsiniz . Dosyaları değiştirmeye başlamak istiyorsanız, etikete dayalı bir şube oluşturmanız gerekir:

$ git checkout -b my_tag_branch my_tag

my_tag_branchbaşlangıç ​​tarihi olarak adlandırılan yeni bir şube oluşturur my_tag. Bu dalda değişiklik yapmak güvenlidir.


1
Harika bir cevap.
Panos Filianos

9

git log --decorate

Bu, şu anda teslim alınmış taahhüdün hangi referansların işaret ettiğini size söyleyecektir.

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.