2016-12-12 14 views
19

मैंने अपनी कामकाजी निर्देशिका को साफ़ करने के लिए हमेशा git checkout -- . का उपयोग किया। मैंने सोचा कि मैं पढ़ कहीं कि -- आप मानकों (या कुछ और) से गुजर रहे हैं सोचगिट चेकआउट -। बनाम गिट चेकआउट

अब एक सहयोगी ने मुझे बताया मैं -- छोड़ सकता है, और वास्तव में, एक त्वरित परीक्षण बिल्कुल वैसा ही किया था Git से बचने के लिए आवश्यक था।

क्या उन दो आदेशों के बीच कोई अंतर है?

पुनश्च: यहाँ पूछ क्योंकि git checkout -- . बनाम git checkout . तरह की कड़ी गूगल है ...

+0

आपने यह कहां पढ़ा? क्या आपने [आधिकारिक दस्तावेज] (https://git-scm.com/docs/git-checkout) पढ़ा है? – axiac

उत्तर

27

मुझे याद है कि एक तरह से -- Git बताने के लिए एक फ़ाइल के रूप checkout अनुसरण करता है और नहीं एक के रूप में इलाज के लिए लग रहे हैं डाली। मान लीजिए कि आपके पास stuff नामक एक फ़ाइल और शाखा दोनों थी। फिर निम्न आदेश अस्पष्ट प्रतीत होता है:

git checkout stuff 

क्योंकि यह स्पष्ट नहीं है कि आप किसी फ़ाइल या एक शाखा चेकआउट करने के लिए पूछ रहे हैं। -- का उपयोग करके आप स्पष्ट रूप से उस नाम/पथ से फ़ाइल को चेकआउट करने के लिए गिट को बताते हैं। इसलिए इस मामले में निम्न कमांड एक शाखा और एक फ़ाइल stuff कहा जाता है बाहर की जाँच की अनुमति:

git checkout stuff  # checkout the branch stuff 
git checkout -- stuff # checkout the file stuff 

ध्यान दें कि git checkout <name> वास्तव में शाखाओं के लिए है, लेकिन Git वाक्य रचना को आराम है, और अगर Git एक शाखा नहीं मिल रहा है, तो यह एक फाइल की तलाश करेगा।

निकट से संबंधित: Git change branch when file of same name is present

+0

मेरा वास्तव में मतलब था 'गिट सह।' उर्फ ​​'गीट रीसेट हेड - हार्ड'। लेकिन मुझे लगता है कि मैं पिछले दो सालों से उन दो डैशों को अतिरंजित कर रहा हूं :) – Laoujin

+0

@ लॉउजिन 'गिट सह।' निश्चित रूप से * उर्फ ​​* 'गिट रीसेट - हार्ड 'नहीं है। वे दो आज्ञाएं अलग-अलग चीजें करती हैं। – poke

7

-- के रूप में एक स्टैंडअलोन तर्क (अर्थात एक और तर्क का हिस्सा नहीं) कई यूनिक्स कमांड लाइन प्रोग्राम द्वारा उपयोग किया जाता है कि कुछ भी है कि यह कोई तर्क नहीं है इस प्रकार से संकेत मिलता है।

क्यों? खैर, इस मामले में, यदि आपके पास पथ है जिसका नाम -- से शुरू होता है, जिसका उपयोग अपने तर्क के रूप में नहीं किया जाना चाहिए।

यानी git checkout -- --mydirectory जो -- के बिना एक त्रुटि फेंक देगा।

संबंधित मुद्दे