jaipur - integrate git bash with visual studio code




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

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

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

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


HEAD ^^^ HEAD ~ 3 के समान है, HEAD से पहले तीसरी प्रतिबद्धता का चयन करना

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


TLDR

~ वह है जो आप अधिकतर समय चाहते हैं, यह संदर्भ वर्तमान शाखा में करता है

^ संदर्भ माता-पिता (गिट-विलय दूसरे माता-पिता या अधिक बनाता है)

ए ~ हमेशा ए ^ के समान होता है
ए ~~ हमेशा एक ^^ के समान होता है, और इसी तरह
ए ~ 2 ए ^ 2 जैसा नहीं है, हालांकि,
क्योंकि ~ 2 ~~ के लिए शॉर्टेंड है
जबकि ^ 2 किसी भी चीज़ के लिए शॉर्टेंड नहीं है, इसका मतलब है दूसरा माता-पिता


मेरे दो सेंट...


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

मूल रूप से [email protected]{} चर हेड आंदोलन के इतिहास को कैप्चर करते हैं, और आप कमांड git reflog रीफ्लॉग का उपयोग करके गिट के रीफ्लॉग को देखकर किसी विशेष सिर का उपयोग करने का निर्णय ले सकते हैं।

उदाहरण:

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

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


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

ref~ ref~1 लिए ref~1 और इसका मतलब है प्रतिबद्ध का पहला माता-पिता। ref~2 अर्थ है प्रतिबद्धता के पहले माता-पिता के पहले माता-पिता। ref~3 अर्थ है प्रतिबद्धता के पहले माता-पिता के पहले माता-पिता के पहले माता-पिता। और इसी तरह।

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

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


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

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

G   H   I   J
 \ /     \ /
  D   E   F
   \  |  / \
    \ | /   |
     \|/    |
      B     C
       \   /
        \ /
         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

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


सरलता से :

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

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

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

प्रत्येक शाखा में तीन अंतिम प्रतिबद्धता क्रमशः हैं:

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

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

git merge B C

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

तथा

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

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

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

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

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

नोटिस 1 :

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

और आम तौर पर :

  • HEAD~n हमेशा बराबर होता है: HEAD~...~ ( n times ~ ) और to: HEAD^...^ ( n times ^ )।

नोटिस 2 :

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

और आम तौर पर :

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




git