दिलचस्प पोस्ट
कैसे एक निश्चित चरित्र के बाद सब कुछ पाने के लिए? बाश में बहु-आयामी सरणियां वाइल्डकार्ड के साथ नया जेनेरिक ऑब्जेक्ट बनाना मुझे जावास्क्रिप्ट प्रोटोकॉल निर्दिष्ट करने की आवश्यकता कब है? मैक ओएस एक्स पर स्थापित जावा 7 लेकिन टर्मिनल अभी भी संस्करण 6 का उपयोग कर रहा है रूबी में एक यादृच्छिक स्ट्रिंग कैसे उत्पन्न करें टर्मिनल में मैं तेजी से कैसे उपयोग कर सकता हूं? स्विफ्ट 2.0: 'एन्यूमरेट' अनुपलब्ध है: अनुक्रम पर 'एन्यूमरेट ()' विधि को कॉल करें सूची दृश्य आइटम नहीं काम करें MVVM: एक दृश्य मॉडल के लिए रेडियो बटन बाध्यकारी है? ओरेकल टॉप टॉप 10 रिकॉर्ड LINQ रिकर्सन फ़ंक्शन? क्या विज़ुअल स्टूडियो डिजाइनर में एक फॉर्म का आकार स्क्रीन रिज़ॉल्यूशन तक सीमित है? मैं जावास्क्रिप्ट में एक संख्या को कैसे गोल करूं? नेटबीन्स जीयूआई एडिटर अपने खुद के समझ से बाहर कोड को तैयार करते हैं

गिट में HEAD ^ और HEAD ~ के बीच क्या अंतर है?

जब मैं गिट में एक पूर्वजों को ऑब्जेक्ट को निर्दिष्ट करता हूं, तो मैं HEAD^ और HEAD~ बीच उलझन में हूँ

दोनों में "क्रमांकित" संस्करण है HEAD^3 और HEAD~2 जैसे

वे बहुत ही समान हैं या मेरे लिए समान हैं, लेकिन क्या टिल्ड और कैरेट के बीच कोई अंतर है?

वेब के समाधान से एकत्रित समाधान "गिट में HEAD ^ और HEAD ~ के बीच क्या अंतर है?"

HEAD^ मतलब है वर्तमान शाखा की नोक के पहले अभिभावक।

याद रखें कि जीआईटी में एक से अधिक माता-पिता हो सकते हैं। HEAD^ HEAD^1 लिए कम है, और आप HEAD^1 HEAD^2 पते को भी संबोधित कर सकते हैं और उपयुक्त के रूप में।

आप किसी भी चीज के माता-पिता को प्राप्त कर सकते हैं, सिर्फ HEAD नहीं। आप पीढ़ियों के माध्यम से भी वापस जा सकते हैं: उदाहरण के लिए, master~2 मतलब मास्टर शाखा की डिपॉजिट है, अस्पष्टता के मामलों में पहले माता-पिता का समर्थन करते हुए। इन विनिर्देशकों को मनमाने ढंग से जंजीर किया जा सकता है, जैसे , topic~3^2

पूर्ण विवरण के लिए, git rev-parse दस्तावेज़ीकरण में "पुनरीक्षण निर्दिष्ट करना" देखें।

इस विचार के दृश्य प्रस्तुति के लिए, दस्तावेज़ीकरण के भाग का उद्धरण दें:

यहां जॉन लॉएलीगर द्वारा एक उदाहरण दिया गया है दोनों प्रतिबद्ध नोड्स बी और सी प्रतिबद्ध नोड ए के माता-पिता हैं। माता-पिता को बाएं-से-दाएं का आदेश दिया जाता है।

 GHIJ \ / \ / DEF \ | / \ \ | / | \|/ | BC \ / \ / A A = = A^0 B = A^ = A^1 = A~1 C = A^2 = A^2 D = A^^ = A^1^1 = A~2 E = B^2 = A^^2 F = B^3 = A^^3 G = A^^^ = A^1^1^1 = A~3 H = D^2 = B^^2 = A^^^2 = A~2^2 I = F^ = B^3^ = A^^3^ J = F^2 = B^3^2 = A^^3^2 

http://www.kernel.org/pub/software/scm/git/docs/git-rev-parse.html पर पाए गए चित्रण (जेन लेलिगर द्वारा) द्वारा वर्णित HEAD^ और HEAD~ बीच का अंतर अच्छी तरह से वर्णित है।

यह दस्तावेज़ीकरण शुरुआती के लिए थोड़ा अस्पष्ट हो सकता है इसलिए मैंने नीचे दिए उदाहरण को पुन: प्रस्तुत किया है:

 GHIJ \ / \ / DEF \ | / \ \ | / | \|/ | BC \ / \ / A A = = A^0 B = A^ = A^1 = A~1 C = A^2 = A^2 D = A^^ = A^1^1 = A~2 E = B^2 = A^^2 F = B^3 = A^^3 G = A^^^ = A^1^1^1 = A~3 H = D^2 = B^^2 = A^^^2 = A~2^2 I = F^ = B^3^ = A^^3^ J = F^2 = B^3^2 = A^^3^2 

अपने आप को ~ और ^ पर दोनों के ~ के माता-पिता को देखें ( ~~ और ^^ दोनों ही दादा-दादी प्रतिबद्ध, इत्यादि का उल्लेख करते हैं) लेकिन जब वे नंबरों के साथ उपयोग किए जाते हैं, तो वे अलग-अलग अर्थ में भिन्न होते हैं:

  • ~2 मतलब पदानुक्रम में दो स्तरों का मतलब है, पहले माता-पिता के जरिए अगर कोई प्रतिबद्धता एक से अधिक माता-पिता है

  • ^2 मतलब दूसरा माता पिता है जहां एक प्रतिबद्ध एक से अधिक माता-पिता है (यानी क्योंकि यह एक मर्ज है)

इन्हें जोड़ा जा सकता है, इसलिए HEAD~2^3 अर्थ है HEAD के दादा-दादी प्रतिबद्ध का तीसरा पैरेंट प्रतिबद्ध है।

मेरे दो सेंट … (ठीक है, मुझे स्टैक ओवरफ्लो पॉलिसी के कारण कुछ और अक्षर टाइप करना पड़ता है।)

यहां छवि विवरण दर्ज करें

^<n> प्रारूप आप प्रतिबद्ध के nth माता पिता (मर्ज में प्रासंगिक) का चयन करने की अनुमति देता है ~<n> प्रारूप आपको पहले माता पिता के अनुसरण में, हमेशा पूर्ववर्ती प्रतिबद्धता का चयन करने की अनुमति देता है। कुछ उदाहरणों के लिए git-rev-parse के दस्तावेज़ीकरण देखें।

यह ध्यान देने योग्य है कि जीआईटी में "से-जहां-आप-आए" / "इच्छित-टू-बैक-अब" ट्रैकिंग के लिए एक वाक्य रचना भी है – उदाहरण के लिए, HEAD@{1} उस स्थान का संदर्भ देगा जहां से आप कूद गए नई प्रतिबद्ध स्थान के लिए

असल में HEAD@{} चर HEAD आंदोलन के इतिहास पर कब्जा कर लेते हैं, और आप जीआईटी रेफरल के आदेश के जरिए जीआईटी के रिफलॉग को देखकर किसी विशेष सिर का उपयोग करने का निर्णय ले सकते हैं।

उदाहरण:

 0aee51f HEAD@{0}: reset: moving to HEAD@{5} 290e035 HEAD@{1}: reset: moving to HEAD@{7} 0aee51f HEAD@{2}: reset: moving to HEAD@{3} 290e035 HEAD@{3}: reset: moving to HEAD@{3} 9e77426 HEAD@{4}: reset: moving to HEAD@{3} 290e035 HEAD@{5}: reset: moving to HEAD@{3} 0aee51f HEAD@{6}: reset: moving to HEAD@{3} 290e035 HEAD@{7}: reset: moving to HEAD@{3} 9e77426 HEAD@{8}: reset: moving to HEAD@{3} 290e035 HEAD@{9}: reset: moving to HEAD@{1} 0aee51f HEAD@{10}: reset: moving to HEAD@{4} 290e035 HEAD@{11}: reset: moving to HEAD^ 9e77426 HEAD@{12}: reset: moving to HEAD^ eb48179 HEAD@{13}: reset: moving to HEAD~ f916d93 HEAD@{14}: reset: moving to HEAD~ 0aee51f HEAD@{15}: reset: moving to HEAD@{5} f19fd9b HEAD@{16}: reset: moving to HEAD~1 290e035 HEAD@{17}: reset: moving to HEAD~2 eb48179 HEAD@{18}: reset: moving to HEAD~2 0aee51f HEAD@{19}: reset: moving to HEAD@{5} eb48179 HEAD@{20}: reset: moving to HEAD~2 0aee51f HEAD@{21}: reset: moving to HEAD@{1} f916d93 HEAD@{22}: reset: moving to HEAD@{1} 0aee51f HEAD@{23}: reset: moving to HEAD@{1} f916d93 HEAD@{24}: reset: moving to HEAD^ 0aee51f HEAD@{25}: commit (amend): 3rd commmit 35a7332 HEAD@{26}: checkout: moving from temp2_new_br to temp2_new_br 35a7332 HEAD@{27}: commit (amend): 3rd commmit 72c0be8 HEAD@{28}: commit (amend): 3rd commmit 

एक उदाहरण हो सकता है कि मैंने स्थानीय- ए-> बी-> सी-> डी किया और फिर मैं अपना कोड चेक करने के लिए 2 कमानों को छोड़कर वापस चला गया – git reset HEAD~2 – और फिर उसके बाद मैं अपना सिर वापस ले जाना चाहता हूं डी – git reset HEAD@{1}

http://www.paulboxley.com/blog/2011/06/git-caret-and-tilde से यहां एक बहुत अच्छा स्पष्टीकरण शब्दशः लिया गया है:

ref~ ref~1 लिए लघुकोड है और इसका मतलब है कि कमेट के पहले अभिभावक ref~2 अर्थ है कमेंट के पहले अभिभावक के पहले अभिभावक ref~3 अर्थ है कमेट के पहले माता पिता के पहले अभिभावक के पहले अभिभावक और इसी तरह।

ref^ ref^1 लिए ref^1 और इसका मतलब है कि कमेट के पहले अभिभावक। लेकिन जहां दोनों अलग-अलग होते हैं, ref^2 अर्थ है प्रतिबद्ध के दूसरे अभिभावक (याद रखें, जब वे विलय कर लेते हैं, तो दो माता-पिता हो सकते हैं)।

^ और ~ ऑपरेटर्स को जोड़ा जा सकता है

यहां छवि विवरण दर्ज करें

हेड ^^^ हेड ~ 3 के समान है, इससे पहले कि वह तीसरा प्रतिबद्धता चुनता है

हेड ^ 2 मर्ज कमिट में दूसरा सिर निर्दिष्ट करता है

  • सिर ~ एक "शाखा" पर पहले माता पिता को निर्दिष्ट करता है

  • हेड ^ आपको प्रतिबद्ध के विशिष्ट अभिभावक का चयन करने की अनुमति देता है

एक उदाहरण:

यदि आप किसी साइड शाखा का अनुसरण करना चाहते हैं, तो आपको कुछ ऐसा निर्दिष्ट करना होगा

 master~209^2~15 

सरलता :

  • ~ पूर्वजों को निर्दिष्ट करता है
  • ^ माता-पिता को निर्दिष्ट करता है

मर्ज करते समय आप एक या अधिक शाखा निर्दिष्ट कर सकते हैं। फिर प्रतिबद्धता में दो या अधिक माता-पिता होते हैं और फिर माता-पिता को इंगित करने के लिए उपयोगी होता है

मान लीजिए कि आप शाखा ए पर हैं और आपके पास दो और शाखाएं हैं: बी और सी

प्रत्येक शाखा में पिछले तीन कमाई क्रमशः हैं:

  • : ए 1 , ए 2 , ए 3
  • बी : बी 1 , बी 2 , बी 3
  • सी : सी 1 , सी 3 , सी 3

अब शाखा A पर यदि आप कमांड निष्पादित करते हैं:

 git merge BC 

तो आप तीन शाखाओं को एक साथ जोड़ रहे हैं (यहां आपके मर्ज कमिट के तीन माता-पिता हैं)

तथा

~ पहली शाखा में n'th पूर्वज को इंगित करता है, तो

  • HEAD~ A3 इंगित करता है
  • HEAD~2 HEAD~2 इंगित करता है
  • HEAD~3 इंगित करता है A1

^ n'th माता पिता को इंगित करता है, तो

  • HEAD^ इंगित करता है A3
  • HEAD^2 इंगित करता है कि बी 3
  • HEAD^3 इंगित करता है C3

एक दूसरे के बगल में ~ या ^ अगले उपयोग, पिछले वर्णों द्वारा नामित प्रतिबद्धता के संदर्भ में है

सूचना 1 :

  • HEAD~3 हमेशा के बराबर है: HEAD~~~ और: HEAD^^^ (प्रत्येक ए 1 इंगित करता है),

और आम तौर पर :

  • HEAD~n हमेशा के बराबर है: HEAD~...~ ( n बार ~ ) और: HEAD^...^ ( n बार ^ )

सूचना 2 :

  • HEAD^3 HEAD^^^ के समान नहीं है (पहला सी 3 इंगित करता है और दूसरा ए 1 इंगित करता है),

और आम तौर पर :

  • HEAD^1 के समान है,
  • लेकिन n > 1: HEAD^n हमेशा HEAD^...^ ( n बार ~ ) के समान नहीं है।

सीधा शब्दों में, माता पिता (वंश, उत्तराधिकार, वंशावली, आदि) के लिए पहले ही एक ही प्रतिबद्ध, जो कि (स्थित) सिर (प्रतिबद्ध) के ऊपर एक माता पिता है, दोनों बिंदुओं के लिए सिर ^ और HEAD।

इसके अलावा, HEAD ^ = HEAD ^ 1 = HEAD ~ = HEAD ~ 1 लेकिन सिर ^^! = HEAD ^ 2! = HEAD ~ 2 फिर भी सिर ^^ = HEAD ~ 2 पढ़ते रहिये।

माता पिता के पहले स्तर से परे, चीजें जटिल हो जाती हैं, खासकर अगर कार्य शाखा / मास्टर शाखा में विलय हो (अन्य शाखाओं से) कैरेट के साथ सिंटैक्स की बात भी है, हेड ^^ = HEAD ~ 2 (वे समतुल्य हैं) लेकिन मुख्य ^ ^! = HEAD ^ 2 (वे पूरी तरह से दो भिन्न चीजें हैं)

प्रत्येक / कैरेट हेड के पहले अभिभावकों को दर्शाता है, यही वजह है कि एक साथ जुड़े हुए कैरट टिल्ड एक्सप्रेशन के बराबर हैं, क्योंकि वे पहले माता-पिता (प्रथम माता पिता) के पहले माता-पिता, आदि आदि को संदर्भित करते हैं। या टिल्ड के बाद की संख्या पर (या तो दोनों तरह से, दोनों एक ही बात का मतलब है), यानी पहले माता-पिता के साथ रहें और एक्स पीढ़ियों तक जाएं।

प्रधान ~ 2 (या हेड ^^), प्रतिबद्धता को संदर्भित करता है जो पदानुक्रम में वर्तमान प्रतिबद्ध (सिर) के ऊपर / ऊपर के दो स्तरों का होता है, जिसका अर्थ है सिर के दादा-दादी प्रतिबद्ध।

दूसरी ओर सिर 2, 2, पहले माता-पिता के दूसरे अभिभावक की प्रतिबद्धता के संदर्भ में नहीं है, बल्कि केवल दूसरे अभिभावकों की प्रतिबद्धता के लिए है। ऐसा इसलिए है क्योंकि कैरेट का मतलब है कि प्रतिबद्ध के अभिभावक, और निम्नलिखित संख्या का अर्थ है कि जो माता पिता की प्रतिबद्धता को संदर्भित किया जाता है (पहला अभिभावक, मामले में जब कैरेट का नंबर नहीं होता है [क्योंकि यह संख्या के लिए लघुकथा है 1 होने के नाते, पहला माता पिता जिसका अर्थ है))। कैरेट के विपरीत, जो संख्या बाद में अनुक्रमित करती है वह किसी अन्य स्तर के ऊपरी तरफ ऊपर की ओर इंगित नहीं करता है, बल्कि यह इंगित करता है कि कितने स्तर बग़ल में, पदानुक्रम में, किसी को सही पैरेंट (कमिट) खोजने के लिए जाना चाहिए। टिल्डे अभिव्यक्ति में संख्या के विपरीत, यह पदानुक्रम में केवल एक ही माता-पिता होता है, भले ही कैरेट की संख्या बढ़ने के बावजूद ऊपर की ओर, कैरट की अनुगामी संख्या पदानुक्रम में माता-पिता के लिए बग़ल में गिरी जाती है [लगातार माता-पिता के स्तर पर जो लगातार कैरेट की संख्या के बराबर है]

तो हेड ^ 3 हेड कमिट के तीसरे अभिभावक के बराबर है (महान-दादाजी नहीं, जो कि सिर ^^^ और सिर ~ 3 होगा …)