2009-05-27 8 views
17

W Git istnieje wiele sposobów odwoływania się do zatwierdzenia, w tym pełnego skrótu SHA lub skróconej postaci skrótu (powiedzmy, pierwszych 6 znaków). Możesz również nazwać zatwierdzenia, używając "przyjaznej" składni, takiej jak GŁOWA, GŁOWA, GŁÓWKA, GŁOWA ~ 3 itd.W Git, czy istnieje sposób na uzyskanie "przyjaznej" nazwy dla dowolnego zatwierdzenia?

Biorąc pod uwagę arbitralne zatwierdzenie w formie skrótu SHA, czy istnieje narzędzie w Git, aby znaleźć "przyjazną" nazwę dla tego zatwierdzenia?

Jeśli korzystam z git-show-branch, otrzymuję listę poprawek w "przyjaznej" formie, więc czuję, że musi być jakiś sposób ... Po prostu nie mogę znaleźć narzędzia, aby to zrobić.

+0

Tylko dla kompletności boską, tu jest przeciwieństwem pytanie: http://stackoverflow.com/questions/3003554/is-there-any-way-to-get-the -sha-of-a-commit-from-its-message – Benjol

Odpowiedz

17

Możesz użyć "git name-rev", aby uzyskać formularz, o który pytasz. Jednym problemem z tą formą jest to, że będąc w stosunku do gałęzi, nie jest ona nazwą stałą. Alternatywą jest "git describe", który tworzy alternatywną przyjazną nazwę w oparciu o to, jak daleko przed tagiem jest dane zatwierdzenie.

Na przykład:

[email protected]:~/src/git <master>$ git name-rev 3cd7388 
3cd7388 master~2 

Ale po tym, jak zrobić "git pull", mistrz ~ 2 może oznaczać coś innego. Natomiast:

[email protected]:~/src/git <master>$ git describe 3cd7388 
v1.6.3.1-153-g3cd7388 

Teraz "v1.6.3.1-153-g3cd7388" jest nazwą stałą. Oczywiście wciąż jest trochę długa (chociaż można skracać bit skrótu na końcu, podając na przykład "--abbrev = 4"), ale komunikuje, że 3cd7388 to 153 zmiany po wersji 1.6.3.1.

+1

Dzięki, obie techniki są użyteczne. Byłem bardziej zainteresowany zachowaniem git-name-rev, ponieważ moim szczególnym przypadkiem użycia było to, że używałem git-log --grep, aby znaleźć commit z konkretną wiadomością, a następnie chciałem móc odnieść się do to jako parametr do przywrócenia git bez konieczności pamiętania skrótu. – mipadi

+2

W takim przypadku zwróć uwagę na opcję "--stdin" dla git name-rev: powinieneś być w stanie wyprowadzić bezpośrednio do niego dane z logu git. – araqnid

+0

Wow. Że. Jest. Niesamowite. Dzięki! – mipadi

3

Spróbuj git describe:

$ git describe --all --contains 90de2680dc54c0d600b0694bd175bd09357a8dba 
master~2