Nie jest to pytanie, które rozważam osobno, ale zastanawiam się, dlaczego git tag( -nlub jakaś inna opcja ...) nie pokazuje skrótów zatwierdzania w pierwszej kolejności. Fajnie jest zobaczyć, jakie rozwiązania wymyślają ludzie, ale uważam to za błąd konstrukcyjny w dostępnych opcjach.
andreee
Odpowiedzi:
143
Aby uzyskać tagi git z hashem SHA1 obiektu Tag, możesz uruchomić:
Uwaga, to nie rozróżnia znaczników uproszczonych i oznaczonych. Dla lekkich tagów pokaże zatwierdzenie, a dla tagów z adnotacjami pokaże hash samego obiektu tagu.
Lily Ballard
20
Aby wyświetlić listę tagów z odwołanymi odwołaniami (w przypadku tagów z adnotacjami) użyj git show-ref --tags -d. Znaczniki z usuniętymi odwołaniami są zastępowane za pomocą ^{}.
S. Christoffer Eliesen
49
Plik git tagKomenda jest słabo rozwinięty. Wiele jest pożądanych, ale ich brakuje, takich jak pełne szczegóły znaczników i znaczniki w kolejności historii zmian.
Zamiast tego lubię to, co daje dokładnie to, czego chcę, ale nie mogę uzyskać od git tag:
git log --oneline --decorate --tags --no-walk
Daje to bardzo ładny, oznaczony kolorami widok tagów w odwrotnej kolejności chronologicznej (tak jak w pełnym logu). W ten sposób nie tylko zobaczysz tagi, ale także skróty skrótów i komunikaty o zatwierdzeniach tagów.
Możesz użyć innych formatów daty w --dateopcji, a także w pełni kontrolować dane wyjściowe, aby dopasować je do swojego wyjątkowego gustu w --prettyopcji. Obie opcje są dobrze udokumentowane w dokumentacji git-log .
Chociaż nie jest to to, o co prosił OP (wyświetlanie haszów zatwierdzeń sha1 ), jest to bardzo przydatne, ponieważ komunikaty o zatwierdzeniach również mogą być przydatne. +1 ode mnie.
Stelios Adamantidis
2
@nealmcb git logjest potężny! Możesz sprawić, by pokazywał dokładnie to, czego chcesz. Spróbuj git log --tags --no-walk --date=iso-local --pretty='%C(auto)%h %cd%d %s'. Możliwe są również inne formaty daty. Wystarczy spojrzeć --datena stronę pomocy. Zaktualizowałem moją odpowiedź, aby uwzględnić tę opcję.
ADTC,
1
@SteliosAdamantidis Właściwie moja odpowiedź zawiera skrócone skróty SHA1 (pierwsze 7 znaków), a jeśli chcesz mieć skróty o pełnej długości, zawsze możesz je zmodyfikować za pomocą --prettyi %H. Dziękuję za +1 :)
ADTC
15
Znaczniki z adnotacjami mają swoje własne SHA − 1, więc musimy je usunąć. Jednak lekkich znaczników nie można wyłuskać, ponieważ wskazują one już na zatwierdzenie. Aby rozwiązać, musimy wymienić oba i przefiltrować obiekty zatwierdzone:
Użycie git log --tags --oneline --no-walkspowoduje również automatyczne uwzględnienie tagów z adnotacjami. :)
ADTC,
11
Aby uzyskać SHA1, do którego odwołuje się jakikolwiek ref (gałąź, tag ...) użyj git rev-parse:
git rev-parse tag1^0 tag2^0
Wypisze tylko pełne SHA1 w osobnych wierszach. ^0Przyrostek jest specjalna składnia, aby upewnić się, że to będzie drukować SHA1 od zmian wskazywanego przez znacznik, czy to adnotacją, czy nie. (Tagi z adnotacjami są obiektami same w sobie, które zawierają wskaźnik do zatwierdzenia wraz z metadanymi. Jeśli wiesz, że znacznik jest opatrzony adnotacją i chcesz, aby znacznik był SHA1, po prostu zostaw znak ^0.)
Oczywiście nie powinieneś tego często robić, ponieważ każde polecenie Git, które zaakceptowałoby SHA1, powinno również akceptować tag!
Najlepsza odpowiedź tutaj, dzięki @Jefromi. Zauważ, że w powłoce cmd Windows każde polecenie git używające ^ musi być cytowane: np. Git rev-parse "tag1 ^ 0" "tag2 ^ 0".
jojo
8
Miałem podobne pytanie, ale chciałem skasować (kilka) określonych tagów. Zauważyłem, że „show-ref” pobierze listę tagów, więc to spełnia swoje zadanie:
Jednak pewne eksperymenty z „git show” zaowocowały następującym poleceniem:
% git show --summary --oneline --decorate v3.4.0.13-ga v3.4.0.13-base
79ba365 (tag: v3.4.0.13-ga, rhins013a) commit message the first
bfc7747 (tag: v3.4.0.13-base) commit message the second
Ponieważ jestem znacznie bardziej zaznajomiony z używaniem „show” niż „show-ref”, uważam, że to drugie jest łatwiejsze do zapamiętania i jest też bardziej pomocne.
Świetne rozwiązanie. Jeśli chcesz mieć tylko nazwy tagenames zamiast pełnej nazwy odniesienia, możesz zmienić użycie %(refname:short)zamiast %(refname).
Radon8472
2
Wziąłem polecenie z postu anatoly techtonik, dodałem nagłówek wiadomości tagów / zatwierdzeń i sformatowałem go jako ładne kolumny.
Rezultatem jest dane wyjściowe identyczne, git tag -nale z przedrostkiem commita-hash.
git tag
(-n
lub jakaś inna opcja ...) nie pokazuje skrótów zatwierdzania w pierwszej kolejności. Fajnie jest zobaczyć, jakie rozwiązania wymyślają ludzie, ale uważam to za błąd konstrukcyjny w dostępnych opcjach.Odpowiedzi:
Aby uzyskać tagi git z hashem SHA1 obiektu Tag, możesz uruchomić:
Wynik będzie wtedy wyglądał mniej więcej tak:
Każda linia to skrót SHA1 tagu, po którym następuje nazwa tagu z prefiksem
refs/tags/
.Jeśli chcesz mieć skrót SHA1 zatwierdzenia, zamiast obiektu znacznika, możesz uruchomić:
Spowoduje to uzyskanie wyników takich jak:
Wiersze kończące się na
^{}
rozpoczynają się hashem SHA1 aktualnego zatwierdzenia, na który wskazuje znacznik.źródło
git show-ref --tags -d
. Znaczniki z usuniętymi odwołaniami są zastępowane za pomocą^{}
.Plik
git tag
Komenda jest słabo rozwinięty. Wiele jest pożądanych, ale ich brakuje, takich jak pełne szczegóły znaczników i znaczniki w kolejności historii zmian.Zamiast tego lubię to, co daje dokładnie to, czego chcę, ale nie mogę uzyskać od
git tag
:Daje to bardzo ładny, oznaczony kolorami widok tagów w odwrotnej kolejności chronologicznej (tak jak w pełnym logu). W ten sposób nie tylko zobaczysz tagi, ale także skróty skrótów i komunikaty o zatwierdzeniach tagów.
Mam alias do
git t
igit tags
w następujący sposób:Uwaga: musiałem użyć przekierowania bash,
git t
ponieważ Git nie obsługuje wywoływania aliasu z innego aliasu (co jest bummer).Jeśli chcesz zobaczyć datę i godzinę zatwierdzenia, spróbuj:
Możesz użyć innych formatów daty w
--date
opcji, a także w pełni kontrolować dane wyjściowe, aby dopasować je do swojego wyjątkowego gustu w--pretty
opcji. Obie opcje są dobrze udokumentowane w dokumentacji git-log .źródło
git log
jest potężny! Możesz sprawić, by pokazywał dokładnie to, czego chcesz. Spróbujgit log --tags --no-walk --date=iso-local --pretty='%C(auto)%h %cd%d %s'
. Możliwe są również inne formaty daty. Wystarczy spojrzeć--date
na stronę pomocy. Zaktualizowałem moją odpowiedź, aby uwzględnić tę opcję.--pretty
i%H
. Dziękuję za +1 :)Znaczniki z adnotacjami mają swoje własne SHA − 1, więc musimy je usunąć. Jednak lekkich znaczników nie można wyłuskać, ponieważ wskazują one już na zatwierdzenie. Aby rozwiązać, musimy wymienić oba i przefiltrować obiekty zatwierdzone:
Wynik z lekkimi tagami:
Wynik z oznaczonymi tagami:
źródło
git log --tags --oneline --no-walk
spowoduje również automatyczne uwzględnienie tagów z adnotacjami. :)Aby uzyskać SHA1, do którego odwołuje się jakikolwiek ref (gałąź, tag ...) użyj
git rev-parse
:Wypisze tylko pełne SHA1 w osobnych wierszach.
^0
Przyrostek jest specjalna składnia, aby upewnić się, że to będzie drukować SHA1 od zmian wskazywanego przez znacznik, czy to adnotacją, czy nie. (Tagi z adnotacjami są obiektami same w sobie, które zawierają wskaźnik do zatwierdzenia wraz z metadanymi. Jeśli wiesz, że znacznik jest opatrzony adnotacją i chcesz, aby znacznik był SHA1, po prostu zostaw znak^0
.)Oczywiście nie powinieneś tego często robić, ponieważ każde polecenie Git, które zaakceptowałoby SHA1, powinno również akceptować tag!
źródło
Miałem podobne pytanie, ale chciałem skasować (kilka) określonych tagów. Zauważyłem, że „show-ref” pobierze listę tagów, więc to spełnia swoje zadanie:
Jednak pewne eksperymenty z „git show” zaowocowały następującym poleceniem:
Ponieważ jestem znacznie bardziej zaznajomiony z używaniem „show” niż „show-ref”, uważam, że to drugie jest łatwiejsze do zapamiętania i jest też bardziej pomocne.
Zobacz także ładne podsumowanie w Jak sprawdzić, na które zatwierdzenie wskazuje tag w Gicie? .
źródło
Tagi muszą być podpisane i / lub przesłane. Lekkie tagi nie mają obiektów SHA1 i są tylko referencjami. W przeciwnym razie spróbuj
git show
.źródło
To daje listę wszystkich zatwierdzeń dla tagów. Tagi z adnotacjami są wyłuskiwane. Wyślij podziękowania tutaj .
źródło
%(refname:short)
zamiast%(refname)
.Wziąłem polecenie z postu anatoly techtonik, dodałem nagłówek wiadomości tagów / zatwierdzeń i sformatowałem go jako ładne kolumny.
Rezultatem jest dane wyjściowe identyczne,
git tag -n
ale z przedrostkiem commita-hash.Jeśli chcesz mieć długie-hash zamiast krótki, yust zastąpić
objectname:short
przezobjectname
.źródło