2011-02-26 10 views
20

अगर मैं काम कर पेड़ में परिवर्तन करने और अभी तक के लिए प्रतिबद्ध नहीं है, और मैंने जो परिवर्तन किए गए हैं वापस लौटने के लिए चाहते हैं, वहाँक्या गिट रीसेट - हार्ड हेड और गिट चेकआउट के बीच कोई अंतर है?

git reset --hard HEAD 

और

git checkout . 

बीच एक अंतर है?

+1

संभावित डुप्लिकेट [क्या "गिट रीसेट - हार्ड हैश" और "गिट चेकआउट हैश" के बीच कोई अंतर है?] (Http://stackoverflow.com/questions/2541545/is-there-a-difference-between -git-रीसेट-कड़ी मेहनत से हैश और Git-चेकआउट-हैश) – Casebash

उत्तर

26

git checkout -- . स्पष्ट रूप से केवल वर्तमान निर्देशिका (और इसके उपनिर्देशिका) पर काम करेगा, git reset --hard पूर्ण कार्यरत पेड़ पर काम करेगा।

git checkout -- . केवल काम करने वाले पेड़ को अपडेट करेगा और पहले से ही चरणबद्ध फ़ाइलों को छोड़ देगा, जबकि git reset --hard हेड प्रतिबद्धता के साथ सूचकांक और काम करने वाले पेड़ से मेल खाता है।

जब एक refspec के साथ प्रयोग किया:

  1. reset दिया प्रतिबद्ध करने के लिए वर्तमान शाखा सिर सेट हो जाएगा (और सूचकांक और काम कर पेड़ से मेल खाता है)
  2. checkout, उस शाखा में बदल जाएगा स्थानीय परिवर्तनों को बनाए छोड़ रहा है, जब वे स्पर्श फ़ाइलें जो वर्तमान शाखा और शाखा के बीच परिवर्तन नहीं किया बाहर जांच की जानी
3

This के प्रो Git लेखक द्वारा एक अच्छा (और पूरी तरह से) विवरण है किताब।

5

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

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