Uzyskaj krótki skrót wersji Git

381

Czy istnieje prostszy sposób na uzyskanie skrótu w wersji HEADGit?

Chcę zobaczyć takie same dane wyjściowe, jak:

 git log -n 1 | head -n 1 | sed -e 's/^commit //' | head -c 8

Pierwotnie użyłem powyższego polecenia, aby wygenerować ciąg wersji, ale jest to jeszcze lepsze:

git describe --tags

Będzie wyświetlać ciągi takie jak 0.1.12(tag zatwierdzony) lub 0.1.11-5-g0c85fbc(pięć zatwierdzeń po tagu).

Attila O.
źródło
2
Ponieważ wydajesz się być dobry w manipulowaniu danymi za pomocą potoków i tym podobnych rzeczy, powinieneś wiedzieć o aliasach git . W tym przypadku istnieje polecenie dotyczące tego, czego chcesz (patrz odpowiedzi), ale w końcu znajdziesz coś, czego nie ma, a aliasy są do tego świetne.
MatrixFrog,
@ MatrixFrog dzięki za wskazówkę! Miałem już kilka prostych aliasów git, ale do tej pory nie wiedziałem, jak potężne mogą być. Szczególnie podoba mi się wyświetlacz graphviz.
Attila O.
1
Huh Kiedy uruchamiam git describe --tags, pojawia się komunikat „fatal: Nie znaleziono nazwisk, nic nie można opisać”. .
Quinn Comendant
@QuinnComendant Prawdopodobnie musisz najpierw oznaczyć coś tagiem, --tagsaby zadziałało. Najpierw spróbuj utworzyć tag ; np git tag 1.0.0.
Attila O.
Możliwy duplikat git dostaje krótki skrót od zwykłego skrótu
Cristian Ciupitu

Odpowiedzi:

696

Spróbuj tego:

git rev-parse --short HEAD

Polecenie git rev-parsemoże robić niezwykłą liczbę różnych rzeczy, więc musisz bardzo uważnie przejrzeć dokumentację, aby to zauważyć.

Mark Longair
źródło
4
możesz wykonać odwrotną operację i uzyskać długi skrót zatwierdzenia z krótkiego skrótu zatwierdzenia, wykonując następujące czynnościgit rev-parse HEAD
Andy
9
Komenda współpracuje również z długich identyfikatorów rev które kopiowaniem wklejone z innych źródeł jak git lognp git rev-parse --short 97dd2ae065771908ee9ae0fa08ccdb58b5a6b18fzwrotów97dd2ae
chiborg
3
Po prostu działa z referencjami. Możesz używać HEAD, nazw znaczników, nazw gałęzi lub zwykłych skrótów.
d12 zamrożone
1
Uwaga, zwraca 7-znakowy skrót zatwierdzenia (domyślnie), podczas gdy wiele miejsc, takich jak gitlab, używa 8 znaków!
masterxilo,
3
Możesz użyć, git rev-parse --short=8 HEADaby uzyskać 8 znaków długości używanych przez GitLab. Możesz także ustawić wartość core.abbrev8 dla określonego repozytorium git za pomocą polecenia takiego jak git config core.abbrev 8 Source
n8felton,
112

Możesz zrobić dowolny format --pretty=format:

git log -1 --pretty=format:%h 
Karl Bielefeldt
źródło
70
git log -1 --abbrev-commit

też to zrobi.

git log --abbrev-commit

wyświetli listę wpisów do dziennika ze skróconą sumą kontrolną SHA-1.

Sanjeev
źródło
1
Drugi jest dokładnie tym, czego szukałem! Bardzo prosty do zapamiętania i przydatny w codziennym życiu.
iFreilicht,
Działa również z git log --pretty=oneline, który w przeciwieństwie do tego --oneline, drukuje skróty w pełnym rozmiarze.
sdaau
46

Prostym sposobem, aby zobaczyć krótką wersję Git commit i komunikat Git commit, jest:

git log --oneline

Zauważ, że jest to skrót

git log --pretty=oneline --abbrev-commit
Gilbert Arenas Dagger
źródło
1
--oneline jest najlepszą opcją
Juan Ignacio Barisich
1
@JuanIgnacioBarisich najlepsza opcja zależy od tego, ile informacji trzeba wyświetlić. Jeśli potrzebujesz więcej informacji, takich jak autor lub data, lepszym rozwiązaniem byłoby git log --abbrev-commit. także log --pretty może być lepszym rozwiązaniem do wyboru, które informacje mają być rejestrowane
prędkość
35

Naprawdę prosty sposób to:

git describe --always
Steven Shaw
źródło
1
ha, kochanie, dotyczy to przypadków, w których git description zawiedzie inaczej (ponieważ opis oczekuje tagu gdzieś w historii) thx
keen
8
Nie jest to dobre, jeśli potrzebujesz krótkiego skrótu - ponieważ może on zwrócić tag z adnotacjami, jeśli taki istnieje.
Zitrax,
W niektórych przypadkach git describe --longmoże pomóc. Z dokumentów : „Zawsze wypisuj długi format (tag, liczbę zatwierdzeń i skróconą nazwę zatwierdzenia), nawet jeśli pasuje do tagu ”. [moje podkreślenie]
djvg
Używanie --longjest lepsze, ale czasami dostajesz krótki skrót, a czasem 3 elementy oddzielone myślnikami. Obecnie używam zaakceptowanej odpowiedzi. Wcześniej nie wiedziałem o tagach z adnotacjami - być może nawet nie istniały!
Steven Shaw
16

Oddział z krótkim hashem i ostatnim komentarzem:

git branch -v

  develop      717c2f9 [ahead 42] blabla
* master       2722bbe [ahead 1] bla
Fabrice
źródło
10

Mam Git w wersji 2.7.4 z następującymi ustawieniami:

git config --global log.abbrevcommit yes
git config --global core.abbrev 8

Teraz kiedy to zrobię:

git log --pretty=oneline

Otrzymuję skrócony identyfikator ośmiu cyfr:

ed054a38 add project based .gitignore
30a3fa4c add ez version
0a6e9015 add logic for shifting days
af4ab954 add n days ago
...
W dół strumienia
źródło
1
Chociaż ten kod może odpowiedzieć na pytanie, zapewnienie dodatkowego kontekstu dotyczącego tego, jak i dlaczego rozwiązuje problem, poprawiłoby długoterminową wartość odpowiedzi.
SherylHohman,
1
Świetny pomysł. Doceniam to, Sheryl
Down the Stream
1

a co z tym :

git log --pretty="%h %cD %cn %s"  

pokazuje coś takiego jak:

674cd0d Środa, 20 listopada 2019 12:15:38 +0000 Wiadomość zatwierdzenia Boba

zobacz dokumentację w pięknym formacie wprowadź opis linku tutaj

prędkość
źródło