"गिट चेकआउट <फ़ाइल नाम>" और "गिट चेकआउट - - <फ़ाइल नाम>" के बीच अंतर


115

http://norbauer.com/notebooks/code/notes/git-revert-reset-a-single-file

मुझे एक पोस्ट मिली है।

लेकिन अभी भी पता नहीं है कि क्या अंतर है

  1. git checkout <filename>

  2. git checkout -- <filename>

किस स्थिति में मुझे क्रमशः पहले और दूसरे का उपयोग करना चाहिए?


जवाबों:


214

विशेष "विकल्प" का --अर्थ है "इस बिंदु के बाद हर तर्क को एक फ़ाइल नाम के रूप में समझो, कोई फर्क नहीं पड़ता कि यह कैसा दिखता है।" यह जीआईटी-विशिष्ट नहीं है, यह एक सामान्य यूनिक्स कमांड लाइन सम्मेलन है। आम तौर पर आप इसका उपयोग यह स्पष्ट करने के लिए करते हैं कि तर्क एक विकल्प के बजाय एक फ़ाइल नाम है , उदाहरण के लिए

rm -f      # does nothing
rm -- -f   # deletes a file named "-f"

git checkout1-- का अर्थ यह भी है कि बाद के तर्क इसके वैकल्पिक "ट्रीडिश" पैरामीटर नहीं हैं जो निर्दिष्ट करते हैं कि आप चाहते हैं।

इस संदर्भ में यह हमेशा उपयोग करने के लिए सुरक्षित है --, लेकिन आपको इसकी आवश्यकता तब होती है जब आप जिस फ़ाइल को वापस करना चाहते हैं उसका एक नाम होता -है जो एक शाखा से शुरू होता है , या एक शाखा के नाम के समान होता है । शाखा / फ़ाइल वितरण के लिए कुछ उदाहरण:

git checkout README     # would normally discard uncommitted changes
                        # to the _file_ "README"

git checkout master     # would normally switch the working copy to
                        # the _branch_ "master"

git checkout -- master  # discard uncommitted changes to the _file_ "master"

और विकल्प / फ़ाइल छूट:

git checkout -p -- README  # interactively discard uncommitted changes
                           # to the file "README"

git checkout -- -p README  # unconditionally discard all uncommitted
                           # changes to the files "-p" and "README"

मुझे यकीन नहीं है कि यदि आपके पास एक शाखा है, जिसका नाम शुरू होता है -। शायद पहली जगह में ऐसा नहीं है।


इस मोड में 1 ; "चेकआउट" कई अन्य चीजें भी कर सकता है। मुझे समझ में नहीं आया है कि क्यों git ने "चेकआउट" सबकोमांड के एक मोड के रूप में "अनअमेडेड बदलावों" को लागू करने के लिए चुना, बजाय अन्य VCSes की तरह "रिवर्ट" के, या "रीसेट" जो मुझे लगता है कि गिट की अपनी शर्तों में अधिक समझ हो सकता है।


12
git checkout <name> शाखा की जाँच करता है <name>। git checkout - <name> फ़ाइल के इंडेक्स संस्करण की जाँच करता है <name>।
दुनि

3
धन्यवाद, दुर्भाग्य से गिट प्रलेखन वास्तव में यह व्याख्या नहीं करता है
कार्लटन

1
"यूनिक्स सम्मेलन" के बारे में: वास्तव --में विकल्पों और तर्कों के बीच एक विभाजक के रूप में व्यापक रूप से लागू किया जाता है। यह किसी भी प्रोग्राम / उपयोगिता के लिए काम करता है जो POSIX getopt(3)का उपयोग अपने कमांड लाइन विकल्प, (देखें man 3 getopt), शेल-स्क्रिप्ट का उपयोग करने के लिए करता है getopt(1), और कुछ प्रोग्राम जो इसे स्वयं लागू करते हैं, लेकिन काम करने के लिए सार्वभौमिक रूप से गारंटी नहीं है ।
17

हा! मैं बस एक उदाहरण तरीका पढ़ता हूं जब काम के बदलावों को कैसे छोड़ना है, इस कमांड-लाइन प्रोग्राम में इस सम्मेलन को देखकर भूल गए, --इसका मतलब है कि 'नकारात्मक परिवर्तन' का मतलब है ला सी / सी ++ - और सोच रहा था कि कभी भी। होश उड़ जाना!
अंडरस्कोर_ड

मेरे जैसे लोगों के लिए: नाम मास्टर द्वारा भ्रमित न हों, उनका मतलब है फ़ाइल नाम मास्टर और शाखा नहीं।
हर्ष

7

निम्नलिखित कुछ भी --एक फ़ाइल नाम के रूप में माना जाता है (एक कार्यक्रम तर्क के रूप में नहीं)। यह महत्वपूर्ण है अगर, उदाहरण के लिए, आपके पास फ़ाइल नाम हैं जो डैश के साथ शुरू होते हैं।

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