के बारे में गलत धारणा के साथ यहां कई उत्तर हैं git reset --soft
। जबकि एक विशिष्ट स्थिति है जिसमें git reset --soft
केवल HEAD
(अलग सिर राज्य से शुरू) बदल जाएगा , आम तौर पर (और इच्छित उपयोग के लिए), यह उस शाखा संदर्भ को स्थानांतरित करता है जिसे आपने वर्तमान में चेक आउट किया है। यदि आप एक शाखा की जाँच नहीं करते हैं, तो निश्चित रूप से ऐसा नहीं कर सकते (इसलिए विशिष्ट स्थिति जहाँ git reset --soft
केवल परिवर्तन होगा HEAD
)।
मुझे यह सोचने का सबसे अच्छा तरीका लगता है git reset
। आप बस नहीं जा रहे हैं HEAD
( सब कुछ करता है ), आप शाखा रेफरी को भी स्थानांतरित कर रहे हैं , जैसे master
। यही होता है जब आप चलाने के लिए इसी तरह की है git commit
(के साथ-साथ वर्तमान शाखा चाल HEAD
), बजाय बनाने (और में जाने) एक के अलावा नई प्रतिबद्ध, आप एक पर ले जाने के पहले करते हैं।
यह एक नई प्रतिबद्धता के अलावा किसी अन्य चीज के लिए reset
एक शाखा को बदलने, नहीं बदलने का बिंदु है HEAD
। आप इसे प्रलेखन उदाहरण में देख सकते हैं:
एक कमेट को पूर्ववत करें, इसे एक विषय शाखा बनाएं
$ git branch topic/wip (1)
$ git reset --hard HEAD~3 (2)
$ git checkout topic/wip (3)
- आपने कुछ कमिट किए हैं, लेकिन एहसास है कि वे "मास्टर" शाखा में होने के लिए समय से पहले थे। आप उन्हें विषय शाखा में चमकाना जारी रखना चाहते हैं, इसलिए वर्तमान HEAD से "विषय / wip" शाखा बनाएं।
- उन तीन आवागमन से छुटकारा पाने के लिए मास्टर शाखा को पुरस्कृत करें।
- "विषय / वाइप" शाखा पर जाएं और काम करते रहें।
आदेशों की इस श्रृंखला का क्या मतलब है? आप यहां एक शाखा को स्थानांतरित करना चाहते हैं master
, इसलिए जब आप master
बाहर की जाँच कर चुके होते हैं, तो आप चलाते हैं git reset
।
यहां शीर्ष मतदान का जवाब आम तौर पर अच्छा है, लेकिन मैंने सोचा कि मैं इसे गलत धारणाओं के साथ कई उत्तरों को सही करने के लिए जोड़ूंगा।
अपनी शाखा बदलें
git reset --soft <ref>
: निर्दिष्ट संदर्भ में, वर्तमान में जाँच की गई शाखा के लिए शाखा सूचक को रीसेट करता है <ref>
। आपकी कार्यशील निर्देशिका और अनुक्रमणिका में फ़ाइलें परिवर्तित नहीं हैं। इस चरण से कमिटमेंट आपको वापस वहीं ले जाएगा जहां आप git reset
कमांड से पहले थे ।
अपना सूचकांक भी बदलें
git reset --mixed <ref>
या समकक्ष
git reset <ref>
:
क्या --soft
करता है और निर्दिष्ट संदर्भ में कमिट को मैच के लिए इंडेक्स भी रीसेट करता है। जबकि git reset --soft HEAD
कुछ भी नहीं है (क्योंकि यह कहता है कि चेक आउट शाखा को चेक आउट शाखा में स्थानांतरित करें) git reset --mixed HEAD
, या समकक्ष git reset HEAD
, एक सामान्य और उपयोगी कमांड है क्योंकि यह सूचकांक को आपकी अंतिम प्रतिबद्ध की स्थिति में रीसेट करता है।
अपनी कार्यशील निर्देशिका भी बदलें
git reset --hard <ref>
: क्या --mixed
करता है और आपकी कार्यशील निर्देशिका को भी अधिलेखित करता है । यह आदेश शाखा रेफरी के सभी रूपों कोgit checkout <ref>
छोड़कर, (और यह महत्वपूर्ण बिंदु है reset
) के समान हैgit reset
HEAD
को इंगित कर रहा है।
"इस तरह के और इस तरह के आदेश के बारे में एक नोट HEAD चलता है":
यह कहना उपयोगी नहीं है कि एक कमांड चलती है HEAD
। कोई भी आदेश जो आपके प्रतिबद्ध इतिहास में है, को बदलता है HEAD
। यह वह जगह HEAD
है , जहाँ भी आप हैं, एक सूचक है। HEAD
तुम हो , और जब भी तुम ऐसा करोगे