"गिट चेकआउट-एफ" और "गिट रीसेट -हार्ड हेड" के बीच अंतर क्या है?


81

मुझे तैनाती के लिए स्थानीय परिवर्तनों को वापस करने की आवश्यकता है। (मैंने इसके svn revertलिए पुराने स्कूल SVN दिनों में इस्तेमाल किया था ।)

और इसके लिए im का उपयोग कर git reset --hard HEADरहे हैं। (इसके अलावा git fetchऔर git merge origin/$branch --no-ffनदी के ऊपर शाखा के साथ स्पेस सक्रियता के लिए।)

लेकिन कुछ लेख git checkout -fपरिवर्तनों को बदलने के लिए इंगित करते हैं।

इस आदेश में मुख्य अंतर क्या है। किस तरीके की सिफारिश की है?


जवाबों:


64

उनमें से दो का सटीक एक ही प्रभाव है। मैं आपको उस समाधान को चुनने की सलाह देता हूं जिसके साथ आप अधिक सहज हैं।

लेकिन अगर इस विशेष मामले में प्रभाव समान है, तो विभिन्न मूल्यों के साथ यह पूरी तरह से अलग होगा। मूल रूप से (वहाँ अधिक है, लिंक किए गए विषयों को देखें) एक रीसेट के साथ आप वर्तमान शाखा और हेड को एक विशिष्ट प्रतिबद्ध पर स्थानांतरित करते हैं लेकिन एक चेकआउट के साथ, आप केवल हेड को स्थानांतरित करते हैं। अधिक जानकारी के लिए नीचे देखें।


संसाधन:

उसी विषय पर:


13

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

मैं एक शाखा में था, सब कुछ साफ। मैंने मास्टर की जाँच की git checkout masterऔर पाया git statusकि उसमें मौजूदा फ़ाइलों के लिए बदलाव किए गए थे जो एक कमिट के लिए नहीं थे (हाँ, उस कोड पर जिसे मैंने अभी देखा था)। मैंने एक स्वच्छ राज्य में वापस जाने के लिए स्ट्रैस करने की कोशिश की, स्टैश ने पूरा होने का दावा किया लेकिन फिर git statusभी अपरिवर्तित था। भी आजमाया git reset --hard HEAD। यह भी सफलतापूर्वक पूरा करने की सूचना दी फिर भी स्थिति अलग नहीं थी। मैं इन अजीब परिवर्तनों को समाप्त नहीं कर सका।

हालाँकि, इसे git checkout -fहल किया। मैं इस विचित्र अवस्था से निकलने में सक्षम था। तो, कम से कम कुछ मायनों में, दोनों समान नहीं हैं।


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

1
हमारे मामले में, यह फ़ाइल अनुमतियों को बदलने के कारण था; यह तय हो गया है stackoverflow.com/questions/1257592/…
माइक वैसन

2
यदि आपकी git लाइन-एंड सेटिंग्स थोड़ी गड़बड़ हो जाती हैं और यह चेकआउट करने वालों को बदलने की कोशिश कर रहा है, तो आपको संभवतः यह समस्या भी हो सकती है।
साइमन ईस्ट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.