गिट चेकआउट का वास्तव में क्या मतलब है?


96

checkoutGit में क्या हैं ?

मुझे पता है कि एक बार जब आप checkoutकिसी विशेष शाखा में जाते हैं, तो HEADउस शाखा के बिंदु। लेकिन वास्तव में इसका अर्थ क्या है? क्या इसका मतलब है कि मैं उस शाखा पर काम कर सकता हूं? यदि हाँ, तो, बिना किसी शाखा की जाँच के, मैं इस पर काम करने में सक्षम नहीं हूँ?

इसके अलावा, क्या remote checkoutमतलब है? यह कैसे उपयोगी है?


1
कुछ नहीं लिया। हां, मेरे पास है और मैं इसके सिद्धांत से आता हूं कि इसका क्या मतलब है। यानी HEAD आदि की ओर इशारा करते हैं, लेकिन मैं "चेकआउट कोड" से जानना चाहता हूं - परिवर्तन करें - चेक इन "प्वाइंट ऑफ व्यू" या यह अलग है?
डेहाई

25
@antonijn - मैंने सवाल को टालने की कोशिश की है - यह पहला परिणाम है - इस तरह का दुःख जो एक बार मुझे यहाँ मिला, मैंने देखा कि सवाल बंद था और यह पागल रवैया हर किसी के पास है - मैं टीएफएस पृष्ठभूमि से आता हूं, और मैं "चेकआउट" पर संदेह करना शुरू कर रहा है, जिसका अर्थ है जीआईटी में पूरी तरह से अलग। मैं जानना चाहता हूं कि गिट-लैंड में इसका क्या मतलब है।
1

जवाबों:


59

जैसा कि आपने उल्लेख किया है, HEADएक लेबल नोटिंग है जहां आप कमिटेड ट्री में हैं। जब आप एक कमिट से दूसरे में जाते हैं तो यह आपके साथ चलता है। git checkout <commit>कमिट ट्री में अपना ध्यान केंद्रित HEADकरने के लिए (अपना ध्यान ) निर्दिष्ट स्थान पर घूमने के लिए बुनियादी तंत्र है ।

प्रतिबद्ध तरीके का एक संख्या में से किसी के द्वारा निर्दिष्ट किया जा सकता, हैश, शाखा का नाम, टैग नाम, रिश्तेदार वाक्य रचना (प्रतिबद्ध HEAD^, HEAD~1आदि) और इतने पर। चेकआउट को शाखाओं को बदलने के बारे में विचार करना अक्सर उपयोगी होता है, और कुछ विकल्प होते हैं जो उस दृष्टिकोण से काम करते हैं, लेकिन वे सभी संदर्भ को मानते हैं।

चेकआउट करने के लिए कमिट में कुछ साइड इधर- HEADउधर जाने के अलावा प्रभावित करता है ।

  • वर्किंग डायरेक्टरी को चेक आउट कमेट की स्थिति में अपडेट किया जाता है।
  • यदि शाखा का नाम निर्दिष्ट है, तो चेकआउट उस शाखा को सक्रिय बनाता है। सक्रिय शाखा जोड़े जाने वाले किसी भी नए आवागमन के साथ आगे बढ़ेगी।
    • -bविकल्प के साथ वर्तमान प्रतिबद्ध के आधार पर एक नई शाखा बनाई जाएगी और फिर सक्रिय की जाएगी।
    • साथ --trackविकल्प की जाँच की शाखा एक दूरस्थ शाखा के बारे में पता किया जा सकता है
    • --orphanविकल्प के साथ एक नई शाखा बनाई जाती है (जैसे के साथ -b) लेकिन किसी भी मौजूदा प्रतिबद्ध पर आधारित नहीं होगी।

कुछ और विकल्प हैं, जिन्हें आप git checkout मैन-पेज के बारे में पढ़ सकते हैं , जिनमें से सभी एक ओर से दूसरी ओर जाने के लिए घूमते हैं - बस चलने के अतिरिक्त उस प्रभाव में क्या अंतर होता है HEAD


तो, ऐसा लगता है कि "चेकआउट" का मतलब पूरी तरह से अलग है (वैसे भी टीएफएस की तुलना में - टीएफएस समतुल्य "एक विशेष" परिवर्तनकारी "हो जाएगा)। खुशी है कि मैंने इसे देखा! - क्या "नवीनतम" के लिए कोई जादू निरंतर है? (TFS में यह "T" है) - इस तरह हम "HEAD" लेबल को जाने बिना कोड के नवीनतम संस्करण को डाउनलोड कर सकते हैं?
BrainSlugs83

1
यदि आप किसी शाखा पर हैं, तो शाखा का नाम उस शाखा के लिए नवीनतम प्रतिबद्धता है - यदि आप शाखा पर नहीं हैं, तो आप नवीनतम प्रतिबद्ध हैं। मैं शाखा की परवाह किए बिना भंडार में सबसे हाल की प्रतिबद्धताओं को खोजने के लिए लॉग कमांड का उपयोग करूंगा और फिर मैन्युअल रूप से इसे स्थानांतरित करूंगा - लेकिन मुझे यकीन है कि यदि आवश्यक हो तो इसे स्वचालित किया जा सकता है।
डेविड कुलप

अंतिम पैराग्राफ के बारे में: कृपया ध्यान दें कि git checkout <commit> <path>शाखाओं को स्विच न करें।
गलाथ

आपका स्पष्टीकरण गलत नहीं है, लेकिन आप एक बहुत ही महत्वपूर्ण (और संभावित खतरनाक) उपयोग के मामले को भूल गए git checkout <path>:।
एरिक डुमिनील

24

मुझे फ़ाइल, फ़ोल्डर और शाखाओं के साथ चेकआउट के कुछ उपयोग मामलों की व्याख्या करने दें ताकि यह समझने में सहायक हो।

मान लें कि हमारे पास नाम का फोल्डर है devऔर index.htmlसब कुछ ट्रैक किया गया है और वर्किंग डायरेक्टरी क्लीन है।

अगर मैं गलती से फ़ाइल का नाम बदल देता index.htmlहूं और मैं पूर्ववत करना चाहता हूं तो मैं बस इसका उपयोग git checkout index.htmlकरूंगा और उस फ़ाइल राज्य को वर्तमान में चयनित शाखा से पुनर्प्राप्त करूंगा।

अब अगर मैंने devफोल्डर में कुछ बदलाव किया है और उसे रिकवर करना चाहता हूं। मैं उपयोग कर सकता हूं git checkout devलेकिन क्या होगा अगर devउस फ़ोल्डर की जांच करने के बजाय पहले से ही शाखा का नाम है, यह उस शाखा को नीचे खींच देगा। इससे बचने के लिए मैं ऐसा नहीं करूंगा git checkout -- dev

अब यहाँ नंगे डबल डैश वर्तमान शाखा के लिए खड़ा है और devवर्तमान में चयनित शाखा से फ़ोल्डर के लिए पूछ रहा है ।

इसी तरह अगर मैं ऐसा git checkout alpha devकरता हूं तो यह अल्फा ब्रांच से देव फोल्डर को नीचे खींच देगा।

यह उत्तर आपके पहले प्रश्न 'गिट चेकआउट वास्तव में माध्य' के लिए है।


2
आपकी अंतिम पंक्ति में यह उत्तर आपके पहले प्रश्न 'गिट चेकआउट वास्तव में माध्य' के लिए है। क्या आप 'मीन' शाखा से 'वास्तव में' फ़ोल्डर की जाँच कर रहे हैं: पी
परमवीर सिंह करवाल

22

"बाहर की जाँच" का अर्थ है कि आप भंडार से दिए गए किसी भी कमिट को लेते हैं और कार्यशील निर्देशिका में संबंधित फ़ाइल और डायरेक्टरी ट्री की स्थिति को फिर से बनाते हैं।

जब आप एक ऐसी शाखा की जाँच करते हैं जो शाखा प्रमुख नहीं होती है (उदाहरण के लिए git checkout HEAD~2), तो आप एक तथाकथित अलग सिर पर होते हैं। आप यहां कमिट बना सकते हैं, लेकिन एक बार जब आप किसी दूसरी ब्रांच में चले जाते हैं, तो वे कमिट्स ब्रांच नाम से रिकवर नहीं किए जा सकते हैं और कुछ समय बाद कचरा इकट्ठा करने वाले द्वारा हटा दिए जा सकते हैं।

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