अस्थायी रूप से काम करने वाली कॉपी को एक विशिष्ट Git कमेट में बदल दें


248

इसके बाद किए गए सभी कमिटों को खोए बिना विशिष्ट गिट कमिट में कैसे स्विच करें ?

मैं चाहता हूं कि स्थानीय फाइलें बदल दी जाएंगी, लेकिन यह माना जाता है कि 'डेटाबेस बरकरार रहेगा, केवल वर्तमान स्थिति सूचक वर्तमान में चयनित प्रतिबद्ध है।

मैं फ़ाइलों की स्थिति को विशिष्ट कमिट में बदलना चाहता हूं, परियोजना को चलाता हूं और जब काम पूरा हो जाता है, तो फाइलों को अंतिम प्रतिबद्ध पर वापस रख देता हूं।

पूरे प्रोजेक्ट के फ़ोल्डर को ज़िप किए बिना ऐसा कैसे करें?


जवाबों:


344

आप एक निश्चित शाखा में कर रहे हैं mybranch, बस आगे बढ़ो और git checkout commit_hash। तब आप अपनी शाखा में वापस आ सकते हैं git checkout mybranch। मेरे पास आज एक बग बनाने वाला एक ही गेम था :) इसके अलावा, आपको गिट बायसेक्ट के बारे में पता होना चाहिए ।


6
ध्यान दें कि आप केवल git checkout commit_hashतभी कर सकते हैं जब आप एक स्वच्छ भंडार पर हों और आपको ब्रांचिंग करने की आवश्यकता न हो। कुछ उपयोग मामलों (जैसे मेरा) के लिए आसान हो सकता है।
एंडरलैंड

@ेंडरलैंड: आपका हेड हमेशा कुछ शाखा में, सामान्य रूप से इशारा करता है :)
अलेक्जेंडर पावलोव

मेरे पास एक मुद्दा है जहां मुझे पूरी कमिट हैश का उपयोग करना पड़ा क्योंकि एक आंशिक स्वीकार नहीं किया गया था।
मय्यम

6
git bisectसंदर्भ के लिए अपवोट ; क्या एक अत्यंत उपयोगी उपकरण है!
नीक

54

सबसे पहले, git logलॉग को देखने के लिए उपयोग करें, जिस कमिट को आप चाहते हैं उसे चुनें, कम से कम उस 1 हैश को नोट करें जो कमिट की पहचान करने के लिए उपयोग किया जाता है। अगला, भागो git checkout hash। के बाद आप, किया जाता है git checkout original_branch। यह हेड को स्थानांतरित नहीं करने का लाभ है, यह बस काम की प्रतिलिपि को एक विशिष्ट प्रतिबद्ध में बदल देता है।


4
मुझे लगता है कि आपका मतलब है git checkout <original_branch>git checkout HEADप्रभावी ढंग से एक NOOP है
अबे Voelker

3
git reset --hard <hash>वर्तमान शाखा के हेड को बदल देता है, जबकि आपके साथ git checkout <hash>एक अलग चेकआउट मिलता है जो किसी भी शाखा को नहीं बदलता है, और आप अपनी शाखा की मूल हैश आईडी को जाने बिना आसानी से वापस आ सकते हैं जैसा कि इस उत्तर में दिखाया गया है।
जोफेल

@Femaref Beginner का प्रश्न: इस प्रश्न का संदर्भ दिया गया (अस्थायी रूप से पहले की गई टिप्पणी पर स्विच), HEAD को स्थानांतरित करने या स्थानांतरित करने के लिए एक लाभ या नुकसान क्यों होगा?
अखरोट के बारे में natty

@nuttyaboutnatty मेरा संपादन मान लिया गया है, तो उसे आपके प्रश्न का उत्तर देना चाहिए। HEAD वास्तव में किसी भी घटना में स्थानांतरित हो जाता है; लेकिन एक चेकआउट में शाखा संदर्भ HEAD अंक स्वयं स्थानांतरित नहीं होता है।
इक्रिस्टोफ़र्सन

15

अन्य उत्तरों के अलावा, यहाँ आपको git checkout <the-hash-you-want>यह दिखाने का तरीका बताया गया है कि आप यह जानने के लायक हैं कि आप उस जगह पर वापस जा सकते हैं जहाँ आप उपयोग कर रहे थे:

git checkout @{-1}

यह अक्सर अधिक सुविधाजनक होता है:

git checkout what-was-that-original-branch-called-again-question-mark

जैसा कि आप अनुमान लगा सकते हैं, git checkout @{-2}आपको उस शाखा में वापस ले जाएगा जहाँ आप दो साल git checkoutपहले थे, और इसी तरह अन्य संख्याओं के लिए। यदि आप याद कर सकते हैं कि आप बड़ी संख्या में कहां थे, तो आपको उसके लिए किसी प्रकार का पदक प्राप्त करना चाहिए।


उत्पादकता के लिए दुख की बात है, git checkout @{1}आपको भविष्य में उस शाखा में नहीं ले जाएगा, जो शर्म की बात है।


1
ध्यान दें कि के git checkout -लिए एक आशुलिपि उर्फ ​​हैgit checkout @{-1}
नाथनेल

@ नथनाएल OMGOD , कोई रास्ता नहीं ... यह सब कुछ बदल देता है! अच्छा आपका धन्यवाद! ... मैं इसे उत्तर में शामिल करने जा रहा था, लेकिन मुझे लगता है कि सामान्य @{n}वाक्यविन्यास के बारे में जानना भी उपयोगी है , क्योंकि यह बहुत सारी कमांड के साथ काम करता है। मुझे जवाब देने के बजाय अपने शॉर्टहैंड को जोड़ने में मुश्किल हुई, बजाय भ्रमित करने के। इसके बजाय मैंने आपकी टिप्पणी पर मतदान किया है - मुझे उम्मीद है कि लोग इसे देखेंगे। एक बार फिर धन्यवाद।
बेंजो

1
कोई दिक्कत नहीं है। यह चर्चा वैसे भी वास्तविक प्रश्न के लिए स्पर्शरेखा है। अधिक बोनस! मैं अक्सर एक रिलीज में सुविधाओं के विलय के लिए एक ही वाक्यविन्यास का उपयोग करता हूं। जैसे git merge -विलय करने के लिए शाखा आप पिछले था अभी चेक आउट शाखा में चेक आउट किया। यह cd -बैश में जैसा है।
नथनैल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.