Git स्विच और git चेकआउट <ब्रांच> में क्या अंतर है


165

Git 2.23 एक नई कमांड का परिचय देता है git switch- डॉक्स पढ़ने के बाद, यह बहुत ज्यादा लगता है जैसे git checkout <branchname>कोई अंतर या उपयोग के मामले की व्याख्या कर सकता है?

दो नए कमांड "गिट स्विच" और "गिट रिस्टोर" को "अपने इतिहास को आगे बढ़ाने के लिए एक शाखा की जाँच करने के लिए" और "या एक ट्री-आईश को सूचकांक से आगे बढ़ाने के लिए काम करने के लिए एक शाखा की जाँच करने के लिए" विभाजित करने के लिए पेश किया गया है। इतिहास "सिंगल" गिट चेकआउट "कमांड से बाहर।


2
इस विषय में InfoQ पर एक अच्छा लेख है: infoq.com/news/2019/08/git-2-23-switch-restore
rsenna

जवाबों:


179

खैर, आपके द्वारा लिंक किए गए दस्तावेज़ के अनुसार, इसका एकमात्र उद्देश्य दो अलग-अलग उपयोगों को विभाजित और स्पष्ट करना है git checkout:

  • git switchअब शाखाओं को बदलने के लिए इस्तेमाल किया जा सकता है, जैसा कि git checkout <branchname>करता है
  • git restoreकुछ संशोधन के लिए फ़ाइलों को रीसेट करने के लिए इस्तेमाल किया जा सकता है, जैसा कि git checkout --<path_to_file>करता है

उपयोग करने के इन विभिन्न तरीकों से लोग भ्रमित हो जाते हैं git checkout, जैसा कि आप git checkoutस्टैकवॉटरफ़्लो पर यहां से संबंधित कई प्रश्नों से देख सकते हैं । Git Developers ने इसे ध्यान में रखा है।


32
यह एक अच्छा बदलाव लगता है। एक शाखा बनाओ? git checkoutब्रांच स्विच करें? git checkoutकिसी फ़ाइल का एक निश्चित संस्करण प्राप्त करें? git checkoutएक फ़ाइल में परिवर्तन निकालें? git checkoutईमानदारी से मैं सोच रहा हूँ कि विभिन्न झंडों से सामान्य git वर्कफ़्लो कितना किया जा सकता है git checkout
कैप्टन मैन

5
तो क्या यह विचार अब git checkoutतकनीकी रूप से किसी भी चीज़ के लिए आवश्यक नहीं है? या यह अभी भी कुछ चीजों के लिए उपयोग में है, जैसे कि एक प्रतिबद्ध की जाँच करना जो एक शाखा प्रमुख नहीं है ("अलग सिर" मोड में जा रहा है)?
पीटरसन ने 12

5
@ माइक कैसे कह सकते हैं कि चेकआउट करने के बाद आप चेकआउट शाखाओं को एक वाक्य नहीं बनाते हैं? यह -bध्वज के आंतरिक कामकाज से कोई फर्क नहीं पड़ता । यह अभी भी एक शाखा बनाता है।
कप्तान मैन

5
@CaptainMan, checkout ऑपरेशन एक शाखा नहीं बनाता है, यह केवल पहले से मौजूद शाखा में बदल सकता है। वास्तव में चेकआउट करने से पहले कमांड का -bविकल्प आंतरिक रूप से प्रदर्शन करता है। यह उसी तरह है जैसे + के लिए एक शॉर्टकट है । checkout git branchgit pullgit fetchgit merge
माइक

7
सहायक नोट: git checkout -b <branch name>आप जिन लोगों के लिए उपयोग किए git switch -c <branch name>जाते हैं, वे एक ही प्रभाव प्राप्त करने के लिए उपयोग कर सकते हैं
Xeuron

72

git checkout सेना के चाकू का एक सा है जिसमें कई असंबंधित उपयोग हैं।

यदि आप किसी फ़ाइल को संशोधित करते हैं, लेकिन परिवर्तन का मंचन नहीं किया है, तो git checkout <filename>संशोधनों को उल्टा कर देगा ... फ़ाइल में परिवर्तनों को रद्द करने का एक त्वरित और आसान तरीका। आप उसी शाखा में बने रहते हैं।

git checkout <branchname> (जैसा कि आपने बताया) शाखाओं को स्विच करता है।

दो पूरी तरह से अलग उद्देश्य, जो एक फ़ाइल नाम और एक शाखा नाम समान होने पर भ्रम की स्थिति पैदा कर सकता है।

दो आदेशों के रूप में यह स्पष्ट है।


जैसा कि आपने उल्लेख किया है कि एक ही नाम वाली एक शाखा और फ़ाइल भ्रमित है। मुझे लगता है कि शाखा फ़ाइल पर प्राथमिकता लेती है, क्योंकि यह अक्सर अधिक वांछनीय होगा? या वह काम कैसे करता है?
एजेंटएम

@AgentM हाँ, यह सही है। यदि किसी शाखा और फ़ाइल का एक ही नाम है, तो करना git checkout <name>फ़ाइल के बजाय शाखा को वरीयता देता है।
कार्तिक सोनीजी

3

switchकुछ सीमाएँ हैं: इस समय आप बदल सकते हैं पर से किसी भी करने के लिए प्रतिबद्ध <branch name>, लेकिन यह स्विच करने के लिए असंभव है से <branch name> करने के लिए एक विशेष की स्थिति के साथ प्रतिबद्ध अलग HEAD । तो आपको उपयोग करने की आवश्यकता है git checkout 5efb(जहां 5 एफबी मनमाने ढंग से प्रतिबद्ध करने के लिए हैश संदर्भ का एक उदाहरण है)


3
मेरा तर्क है कि यह एक सुविधा है और बग (सीमा) नहीं है। switchशाखाओं को बदलने के एकल उद्देश्य के लिए बनाया गया है, और जब आप ऐसा करते हैं, तो आप उस शाखा के HEAD में रहना चाहते हैं। checkoutएक अधिक सामान्य ऑपरेशन है जो आपकी कार्यशील प्रतिलिपि को इतिहास में किसी भी दिए गए राज्य (= प्रतिबद्ध) के अनुरूप लाता है। चूँकि किसी भी शाखा का नाम उस शाखा की हेड कमिटमेंट के लिए एक अन्य नाम है, इसलिए ब्रांच की जाँच करना तकनीकी रूप से किसी अन्य कमेटी की जाँच से अलग नहीं है।
माइक

16
आपके साथ -d:git switch -d 6c13
मेंडी बरेल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.