2011-07-03 16 views
73

http://norbauer.com/notebooks/code/notes/git-revert-reset-a-single-fileअंतर "Git चेकआउट - - <filename>"

मैं एक पोस्ट मिल गया है।

लेकिन फिर भी पता नहीं है

  1. git checkout <filename>

  2. git checkout -- <filename>

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

+1

यह भी देखें [गिट चेकआउट डबल डैश का अर्थ] (http://stackoverflow.com/q/13321458/456814)। –

उत्तर

149

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

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

git checkout भी -- लेता मतलब पर बाद में होने तर्क इसकी वैकल्पिक "treeish" पैरामीटर निर्दिष्ट करना जो प्रतिबद्ध आप चाहते हैं नहीं कर रहे हैं।

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

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 इस मोड में; "चेकआउट" कई अन्य चीजें भी कर सकता है। मैंने कभी नहीं समझा है कि क्यों गिट ने "अन्य चेकआउट" उप-आदेश के रूप में "अनचाहे परिवर्तनों को छोड़ना" को लागू करने का विकल्प चुना है, अन्य अधिकांश वीसीएस की तरह "वापसी" या "रीसेट" के बजाय, जो मुझे लगता है कि गिट की शर्तों में अधिक समझदारी हो सकती है।

+11

गिट चेकआउट शाखा चेक आउट करता है। गिट चेकआउट - फ़ाइल फ़ाइल के इंडेक्स संस्करण को चेक आउट करता है। – dunni

+3

धन्यवाद, दुर्भाग्यवश, गिट दस्तावेज वास्तव में "यूनिक्स सम्मेलन" के संबंध में इस – Carlton

+1

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

5

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

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