2013-03-10 4 views
9

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

मैंने कुछ दस्तावेज पढ़े लेकिन किसी ने भी यह स्पष्ट नहीं किया कि जब आप अपना सिर रीसेट करते हैं तो क्या होता है। क्या आप तब तक सभी कामों को खो देते हैं जब तक कि आप रीसेट कर रहे हैं (पीछे जा रहे हैं) उदाहरण के लिए?

मैं यह समझने की कोशिश कर रहा हूं कि यह सब कैसे काम करता है लेकिन मैं गिट revert, reset और checkout आदेशों के बारे में उलझन में हूं।

मुझे एहसास हुआ कि मुझे करने की बजाए आखिरी प्रतिबद्धता को रोकना चाहिए था, लेकिन यह अब एक और कहानी है।

+1

क्या आप जो करना चाहते हैं उसके बारे में थोड़ा और विशिष्ट हो सकते हैं? क्या आप पिछली प्रतिबद्धता पूर्ववत करना चाहते हैं? या क्या आप दो फाइलों को छोड़कर उन दो बदलावों को बनाए रखना चाहते हैं? – jszakmeister

+0

jszakmeister, ठीक है, मैं किसी भी काम से छुटकारा नहीं लेना चाहता हूं। मैं अपने पिछले इतिहास को बरकरार रखना चाहता हूं। मुझे लगता है कि मैं एक नए कामकाजी चरण के रूप में पहले 2 काम वापस लेना चाहता हूं। –

+0

यह अभी भी स्पष्ट नहीं है कि "वापस लाएं" क्या मतलब है। – wRAR

उत्तर

9

revert एक नई प्रतिबद्धता बनाता है जो पुराने प्रतिबद्धता द्वारा किए गए परिवर्तनों को उलट देता है। reset --hard वर्तमान शाखा के HEAD को निर्दिष्ट प्रतिबद्धता में बदल देता है। checkout कार्यरत प्रति को निर्दिष्ट शाखा में स्विच करता है या प्रतिबद्ध करता है।

जब आप किसी पुराने प्रतिबद्धता में शाखा को रीसेट करते हैं तो वे अन्य शाखाओं या टैग के पूर्वजों के हिस्से नहीं होते हैं, तो वे नए काम खो जाते हैं (वे अभी भी reflog के माध्यम से पहुंच योग्य हैं)।

यह स्पष्ट नहीं है कि आपको क्या करना है, सबसे संभावित समाधान revert (पूरी तरह से पुरानी प्रतिबद्धता या काम करने की श्रृंखला को वापस करने के लिए) और rebase -i (पुराने प्रतिबद्धता को बदलने या इतिहास से इसे हटाने के लिए) हैं।

+0

'गिट रिवर्ट' के मजबूत प्रभाव हैं क्योंकि यह एक प्रतिबद्धता बनाता है जो पिछले प्रतिबद्धता के परिवर्तनों को अस्वीकार करता है। इसका उपयोग करते समय सावधान रहें जब तक आप सुनिश्चित न हों कि आप क्या चाहते हैं। – LopSae

+0

@LopSae बनाई गई प्रतिबद्धता प्रकाशित नहीं की गई है, इसलिए यदि आप ऐसा कुछ नहीं चाहते हैं तो आप इसे आसानी से हटा सकते हैं। रीसेट और रीबेस अधिक खतरनाक कमांड हैं क्योंकि त्रुटियों से वसूली बहुत कठिन है। – wRAR

+0

हाय, @WRAR। जब मैं पिछली प्रतिबद्धता पर वापस चेकआउट करता हूं, उसके बाद, जब मैं प्रतिबद्ध इतिहास देखने के लिए गिट लॉग का उपयोग करता हूं, तो मैंने जो प्रतिबद्धता वापस स्विच की है, उसके बाद सभी रिकॉर्ड गायब हैं। इसे कैसे हल करें? पिछली प्रतिबद्धता के चेकआउट के बाद मेरा पूर्ण प्रतिबद्धता इतिहास देखना है। – Mario

10

यदि आप वापस जाना चाहते हैं, तो 2 कहें पिछली बार, आप केवल git checkout HEAD~2 कर सकते हैं। यह आपको तब मिल जाएगा जैसा वह तब था। यदि आप शाखा master पर थे, git checkout master आपको वर्तमान में वापस लाएगा। यदि, हालांकि, आप वर्तमान स्थिति रखना चाहते हैं लेकिन वहां एक नई डेवलमेंट शाखा शुरू करें, git checkout -b HEAD~2 वहां एक नई शाखा शुरू करेगी। यदि आप मास्टर को रिवाइंड करना चाहते हैं लेकिन अपना वर्तमान, अधूरा/टूटा हुआ काम नहीं खोना चाहते हैं, तो

git branch wip   # New branch ends a current tip 
git reset --hard HEAD~2 # Old branch rewound, get files from then 
संबंधित मुद्दे