कुछ Git कमांड कमिट रेंज लेती हैं और एक वैध सिंटैक्स दो डॉट्स के साथ दो कमिट नामों को अलग करने के लिए है .., और एक अन्य सिंटैक्स तीन डॉट्स का उपयोग करता है ...।
दोनों में क्या मतभेद हैं?
कुछ Git कमांड कमिट रेंज लेती हैं और एक वैध सिंटैक्स दो डॉट्स के साथ दो कमिट नामों को अलग करने के लिए है .., और एक अन्य सिंटैक्स तीन डॉट्स का उपयोग करता है ...।
दोनों में क्या मतभेद हैं?
जवाबों:
यह इस बात पर निर्भर करता है कि आप logकमांड का उपयोग कर रहे हैं या diffकमांड का। में logमामला है, क्या है man git-rev-parseप्रलेखन:
एक कमिट से आने वाले कमिट्स को बाहर करने के लिए, एक उपसर्ग ^ नोटेशन का उपयोग किया जाता है। जैसे ^ r1 r2 का अर्थ है r2 से पहुंच योग्य है, लेकिन r1 से पहुंचने वाले को बाहर करें।
यह सेट ऑपरेशन इतनी बार दिखाई देता है कि इसके लिए एक आशुलिपि है। जब आपके पास दो कम् r1 और r2 हैं (ऊपर दिए गए विनिर्देशनों में बताए गए सिंटैक्स के अनुसार नाम दिया गया है), तो आप उन रस्मों के लिए पूछ सकते हैं जो r2 से पहुंच योग्य हैं, जिन्हें r1 से "r1 r2" से पढ़ कर बाहर रखा जा सकता है और इसे लिखा जा सकता है। "r1..r2"।
एक समान संकेतन "आर 1 ... आर 2" को आर 1 और आर 2 का सममित अंतर कहा जाता है और इसे "आर 1 आर 2 - नॉट $ (गिट मर्ज-बेस - आर 1 आर 2)" के रूप में परिभाषित किया गया है। यह कमिट्स का एक सेट है जो आर 1 या आर 2 में से किसी एक से पहुंच योग्य है लेकिन दोनों से नहीं।
जो मूल रूप से इसका मतलब है कि आपको सभी कमिट मिलेंगे जो दोनों शाखाओं में से किसी एक में हैं, लेकिन दोनों में नहीं।
में diffमामला है, क्या है man git-diffप्रलेखन:
git diff [--options] <commit>...<commit> [--] [<path>...] This form is to view the changes on the branch containing and up to the second <commit>, starting at a common ancestor of both <commit>. "git diff A...B" is equivalent to "git diff $(git-merge-base A B) B". You can omit any one of <commit>, which has the same effect as using HEAD instead.
जो थोडा फजी है। मूल रूप से इसका मतलब यह है कि यह उस शाखा में किसी अन्य शाखा की तुलना में केवल अंतर दिखाता है: यह आपके द्वारा दी गई पहली कमिटिश के साथ अंतिम आम प्रतिबद्धताओं की तलाश करता है, और फिर दूसरी कमिटिश को उसी में बदल देता है। यह देखना आसान है कि इस शाखा में, केवल इस शाखा में परिवर्तनों की सूचना के बिना, उस शाखा में क्या परिवर्तन किए गए हैं।
..कुछ हद तक सरल है: में git-diffमामला है, यह एक के रूप में ही है git diff A Bऔर सिर्फ बी के खिलाफ एक diffs में logमामला है, यह सब करता है कि ए में नहीं बी में हैं, लेकिन पता चलता
..और ...लॉग के लिए बिल्कुल अदला-बदली है और log A..Bमर्ज के आधार से बी में परिवर्तन होता है जो कि क्या diff A...Bहोता है
git diff।
A...B== है A..B + B..A?
git logबिल्कुल हाँ है
जब आप की तरह पर्वतमाला प्रतिबद्ध प्रयोग कर रहे हैं ..और ...साथ git log, उन दोनों के बीच अंतर यह है कि है, शाखाओं ए और बी के लिए,
git log A..B
आप सभी को दिखाएगा कि B के पास A है , जबकि ऐसा नहीं है
git log A...B
आप दोनों को दिखाएंगे कि A के पास A है और B के पास नहीं है, और जो B के पास A है, या दूसरे शब्दों में वह कमिट करता है, जो सभी ए और बी दोनों को साझा करता है, इस प्रकार केवल यह दर्शाता है कि वे दोनों साझा नहीं करते हैं ।
यहाँ का एक दृश्य प्रतिनिधित्व है git log A..B। उस शाखा B में मौजूद कमिट्स में A मौजूद नहीं है, जो कमिट रेंज द्वारा लौटाया गया है, और वेन आरेख में लाल रंग में हाइलाइट किया गया है, और कमिट ट्री में नीले रंग में परिक्रमा की गई है:


ये के लिए आरेख हैं git log A...B। ध्यान दें कि दोनों शाखाओं द्वारा साझा किए गए कमिट्स कमांड द्वारा वापस नहीं किए जाते हैं:


...अधिक उपयोगी बनानाआप ...लॉग-इन कमांड में ट्रिपल-डॉट कमिट को अधिक उपयोगी बना सकते हैं, --left-rightयह दिखाने के लिए कि कौन सी शाखा से संबंधित हैं , विकल्प का उपयोग करके :
$ git log --oneline --decorate --left-right --graph master...origin/master
< 1794bee (HEAD, master) Derp some more
> 6e6ce69 (origin/master, origin/HEAD) Add hello.txt
उपरोक्त आउटपुट में, आप उन कमिटों को देखेंगे जो masterपूर्व से जुड़े हुए हैं <, जबकि यह कहता है कि origin/masterवे पहले से जुड़े हुए हैं >।
किसी दिन मैं अपनी व्याख्या जोड़ सकता हूं कि प्रतिबद्ध सीमाएं किस तरह से काम करती हैं git diff, लेकिन अब के लिए, आप यह जांचना चाहेंगे कि डबल-डॉट ".." और ट्रिपल-डॉट "..." के बीच क्या अंतर है। पर्वतमाला? ।