लघु उत्तर (टीएल; डीआर)
यहां कमिट-ईश और ट्री-आइश आइडेंटिअर्स की पूरी सूची ( 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
----------------------------------------------------------------------
आइडेंटिफ़ायर # 1-14 सभी "कमिट-ईश" हैं, क्योंकि वे सभी कमिट करने के लिए नेतृत्व करते हैं, लेकिन क्योंकि कमिट्स भी डायरेक्टरी ट्री की ओर इशारा करते हैं, वे सभी अंततः (सब) डायरेक्टरी ट्री ऑब्जेक्ट्स की ओर जाते हैं, और इसलिए उन्हें "ट्री" के रूप में भी इस्तेमाल किया जा सकता है -ish "।
# 15 का उपयोग ट्री-ईश के रूप में भी किया जा सकता है जब यह एक (उप) निर्देशिका को संदर्भित करता है, लेकिन इसका उपयोग विशिष्ट फ़ाइलों की पहचान करने के लिए भी किया जा सकता है। जब यह फाइलों को संदर्भित करता है, तो मुझे यकीन नहीं है कि यह अभी भी "ट्री-ईश" माना जाता है, या यदि "ब्लॉब-ईश" की तरह कार्य करता है (Git फाइलों को "ब्लब्स" के रूप में संदर्भित करता है)।
दीर्घ उत्तर
Git में Commits और Directory Trees
अपने न्यूनतम स्तरों पर, Git चार मूलभूत वस्तुओं का उपयोग करके स्रोत कोड का ट्रैक रखता है:
- एनोटेट टैग, जो इंगित करता है।
- Commits, जो आपके प्रोजेक्ट के रूट डायरेक्टरी ट्री को इंगित करता है।
- पेड़, जो निर्देशिका और उपनिर्देशिका हैं।
- बूँदें, जो फाइलें हैं।
इन ऑब्जेक्ट्स में से प्रत्येक की अपनी sha1 हैश आईडी है, क्योंकि लिनस टोरवाल्ड्स ने Git को एक कंटेंट- एड्रेसेबल फाइलसिस्टम की तरह डिजाइन किया है , अर्थात फाइल को उनके कंटेंट के आधार पर पुनर्प्राप्त किया जा सकता है (sha1 ID फाइल कंटेंट से जेनरेट होता है)। प्रो गिट पुस्तक इस उदाहरण आरेख देता है :

कमिट-ईश बनाम ट्री-ईश
कई Git कमांड कमिट और (उप) डायरेक्टरी ट्री के लिए विशेष पहचानकर्ता स्वीकार कर सकते हैं:
"कमिट-ईश" पहचानकर्ता हैं जो अंततः एक प्रतिबद्ध वस्तु का नेतृत्व करते हैं। उदाहरण के लिए,
tag -> commit
"ट्री-ईश" पहचानकर्ता हैं जो अंततः पेड़ (यानी निर्देशिका) वस्तुओं की ओर ले जाते हैं।
tag -> commit -> project-root-directory
क्योंकि प्रतिबद्ध वस्तुएं हमेशा एक निर्देशिका ट्री ऑब्जेक्ट (आपकी परियोजना की मूल निर्देशिका) को इंगित करती हैं, कोई भी पहचानकर्ता जो "प्रतिबद्ध-ईश" है, परिभाषा के अनुसार, "ट्री-ईश" भी है। दूसरे शब्दों में, किसी भी पहचानकर्ता जो एक प्रतिबद्ध वस्तु की ओर जाता है, का उपयोग एक (उप) निर्देशिका ट्री ऑब्जेक्ट को लीड करने के लिए भी किया जा सकता है ।
लेकिन चूंकि डाइरेक्ट ट्री ऑब्जेक्ट्स कभी भी Git के वर्जनिंग सिस्टम में कमिट करने की ओर इशारा नहीं करते हैं, न कि प्रत्येक पहचानकर्ता जो एक (सब) डायरेक्टरी ट्री की ओर इशारा करता है, का उपयोग कमिट को इंगित करने के लिए भी किया जा सकता है। दूसरे शब्दों में, "कमिट-ईश" पहचानकर्ताओं का सेट "ट्री-ईश" पहचानकर्ताओं के सेट का एक सख्त उपसमुच्चय है।
कि पेड़-ish पहचानकर्ता के सेट के रूप में इस्तेमाल नहीं किया जा सकता प्रतिबद्ध-ish हैं
<rev>:<path>है, जो सुराग सीधे निर्देशिका के पेड़ के लिए, वस्तुओं का वायदा नहीं किया। उदाहरण के लिए, HEAD:subdirectory।
निर्देशिका ट्री ऑब्जेक्ट्स के Sha1 पहचानकर्ता ।
stash@{0}। मैं जानना चाहता हूं कि यह सब कहां फिट बैठता है। क्या स्टाश (my-thing@{0}) जैसी कोई अन्य चीजें हैं ? क्या स्टैश सिर्फ एक है<refname>?