Krótka odpowiedź (TL; DR)
Oto pełna lista identyfikatorów zatwierdzeń i drzew (z dokumentacji wersji Git ):
----------------------------------------------------------------------
| Commit-ish/Tree-ish | Examples
----------------------------------------------------------------------
| 1. <sha1> | dae86e1950b1277e545cee180551750029cfe735
| 2. <describeOutput> | v1.7.4.2-679-g3bee7fb
| 3. <refname> | master, heads/master, refs/heads/master
| 4. <refname>@{<date>} | master@{yesterday}, HEAD@{5 minutes ago}
| 5. <refname>@{<n>} | master@{1}
| 6. @{<n>} | @{1}
| 7. @{-<n>} | @{-1}
| 8. <refname>@{upstream} | master@{upstream}, @{u}
| 9. <rev>^ | HEAD^, v1.5.1^0
| 10. <rev>~<n> | master~3
| 11. <rev>^{<type>} | v0.99.8^{commit}
| 12. <rev>^{} | v0.99.8^{}
| 13. <rev>^{/<text>} | HEAD^{/fix nasty bug}
| 14. :/<text> | :/fix nasty bug
----------------------------------------------------------------------
| Tree-ish only | Examples
----------------------------------------------------------------------
| 15. <rev>:<path> | HEAD:README.txt, master:sub-directory/
----------------------------------------------------------------------
| Tree-ish? | Examples
----------------------------------------------------------------------
| 16. :<n>:<path> | :0:README, :README
----------------------------------------------------------------------
Identyfikatory # 1-14 są wszystkie „zatwierdzone”, ponieważ wszystkie prowadzą do zatwierdzeń, ale ponieważ zatwierdzenia wskazują również drzewa katalogów, wszystkie ostatecznie prowadzą do obiektów (pod) drzewa katalogów i dlatego mogą być również używane jako „drzewo -ish ”.
# 15 może być również używany jako drzewo, gdy odnosi się do (pod) katalogu, ale może być również używany do identyfikowania określonych plików. Kiedy odnosi się do plików, nie jestem pewien, czy nadal jest uważany za „drzewo-ish”, czy działa bardziej jak „blob-ish” (Git określa pliki jako „bloby”).
Długa odpowiedź
Zatwierdzenia i drzewa katalogów w Git
Na najniższych poziomach Git śledzi kod źródłowy przy użyciu czterech podstawowych obiektów:
- Tagi z adnotacjami, które wskazują na zatwierdzenia.
- Commits, które wskazują drzewo katalogów głównych projektu.
- Drzewa, które są katalogami i podkatalogami.
- Obiekty BLOB, które są plikami.
Każdy z tych obiektów ma swój własny identyfikator hash sha1, ponieważ Linus Torvalds zaprojektował Gita jako system plików z adresowaniem treści , tj. Pliki mogą być pobierane na podstawie ich zawartości (identyfikatory sha1 są generowane z zawartości pliku). Książka Pro Git zawiera przykładowy diagram :

Commit-ish vs Tree-ish
Wiele poleceń Git może akceptować specjalne identyfikatory dla zatwierdzeń i (pod) drzew katalogów:
„Commit-ish” to identyfikatory, które ostatecznie prowadzą do obiektu zatwierdzenia. Na przykład,
tag -> commit
„Drzewo” to identyfikatory, które ostatecznie prowadzą do obiektów drzewiastych (tj. Katalogów).
tag -> commit -> project-root-directory
Ponieważ obiekty zatwierdzone zawsze wskazują na obiekt drzewa katalogów (katalog główny twojego projektu), każdy identyfikator, który jest „zatwierdzony” jest z definicji również „drzewem”. Innymi słowy, każdy identyfikator prowadzący do obiektu zatwierdzenia może być również użyty do wskazania obiektu drzewa (pod) katalogu .
Ale ponieważ obiekty drzewa katalogów nigdy nie wskazują na zatwierdzenia w systemie kontroli wersji Gita, nie każdy identyfikator wskazujący na (pod) drzewo katalogów może być również użyty do wskazania zatwierdzenia. Innymi słowy, zestaw identyfikatorów „zatwierdzonych” jest ścisłym podzbiorem zbioru identyfikatorów „drzewiastych”.
Zestaw drzew-owski identyfikatorów, które nie mogą być stosowane jako popełnić-owski są
<rev>:<path>, co prowadzi bezpośrednio do drzew katalogów, a nie do zatwierdzania obiektów. Na przykład HEAD:subdirectory.
Identyfikatory Sha1 obiektów drzewa katalogów .
stash@{0}. Chciałbym wiedzieć, gdzie to wszystko pasuje. Czy są jakieś inne rzeczy, takie jak stash (my-thing@{0})? Czy skrytka to tylko<refname>?