सॉरीट्री - पूर्ववत अप्रकाशित


208

मैं git-repository के लिए Windows के लिए Sourcetree का उपयोग कर रहा हूं और एक अप्रकाशित कमिट को पूर्ववत करना चाहूंगा।

क्या यह संभव है? यदि मैं "रिवर्ट कमिट" करता हूं, तो यह एक दूसरी कमिट बनाता है, जो पहले कमिट को रिवर्ट करता है, लेकिन मैं नहीं चाहता कि मेरा कमिटमेंट मेरे सोर्स कंट्रोल में बिल्कुल भी दिखाई दे।

मैं अपनी स्थानीय रिपॉजिटरी को हटा भी सकता था और अपने स्थानीय कमिट के बिना इसे फिर से खींच सकता था, लेकिन शायद कोई और तरीका हो?


मैंने स्क्रीनशॉट के साथ एक विस्तृत लेख लिखा है। आशा है कि यह मदद करेगा साझा करना: attosol.com/undo-in-git-use-sourcetree
राहुल सोनी

जवाबों:


345
  1. उस रीसेट पर राइट क्लिक करें जिसे आप रीसेट करना चाहते हैं (वह नहीं जिसे आप हटाना चाहते हैं!)
  2. "इस प्रतिबद्ध के लिए मास्टर रीसेट करें" चुनें
  3. "सॉफ्ट" रीसेट का चयन करें।

एक सॉफ्ट रीसेट आपके स्थानीय बदलावों को बनाए रखेगा।

स्रोत: https://answers.atlassian.com/questions/153791/how-should-i-remove-push-commit-from-sourcetree

संपादित करें

के बारे में git revert: यह आदेश एक नई प्रतिबद्ध बनाता है जो अन्य कमानों को पूर्ववत कर देगा। उदा। यदि आपके पास एक प्रतिबद्ध है जो एक नई फ़ाइल जोड़ता है, git revertतो इसका उपयोग एक कमिट बनाने के लिए किया जा सकता है जो नई फ़ाइल को हटा देगा।

एक नरम रीसेट लागू करने के बारे में: मान लें आप करता है Aकरने के लिए E( A---B---C---D---E) और आप पिछले करने को हटाने के लिए (चाहते E)। तब आप कमिट करने के लिए सॉफ्ट रिसेट कर सकते हैं D। सॉफ्ट रिसेट कमिट के साथ Eगिट से डिलीट कर दिया जाएगा लेकिन लोकल बदलाव को रखा जाएगा। Git रीसेट डॉक्यूमेंटेशन में और उदाहरण हैं ।


34
या यदि आप एक शाखा पर काम कर रहे हैं - "इस प्रतिबद्ध के लिए वर्तमान शाखा को रीसेट करें"
टॉम ऑगर

5
मैं इन यूआई स्पष्टीकरणों को बहुत ज्यादा नहीं समझता हूं ... इस प्रतिबद्ध के लिए वर्तमान शाखा को रीसेट करें ऐसा लगता नहीं है कि यह कमिट को हटा देगा। और यह वह कर रहा है जो आप अधिक उम्मीद करेंगे। इसने मेरी कार्य प्रतिलिपि को हटा देने के बजाय, इसे प्रतिबद्ध कर दिया।
MrFox

मैं @MrFox से सहमत हूं। मैंने यह करने के बाद भी जो वचन नहीं चाहा था, वह अभी भी पेड़ में दिखाया गया है।
टिमम्म

@Tmmmmm: नई व्याख्या से मदद मिलती है?
रात्रि

वास्तव में मुझे एहसास हुआ कि मैंने पहले ही अपनी प्रतिबद्धता को जीथब के लिए धक्का दे दिया था। मुझे एक लेख मिला जो बताता है कि "इतिहास को फिर से कैसे लिखना है" लेकिन ऐसा लगता है कि यह मूल्य की तुलना में अधिक परेशानी है!
टिम्मम

46

यदि आप उस लॉग एंट्री का चयन करते हैं, जिस पर आप वापस लौटना चाहते हैं तो आप "इस कमेट को रीसेट करें" पर क्लिक कर सकते हैं। केवल इस विकल्प का उपयोग करें यदि आपने रिवर्स कमिट परिवर्तनों को धक्का नहीं दिया। यदि आप परिवर्तनों को खोने के बारे में चिंतित हैं, तो आप सॉफ्ट मोड का उपयोग कर सकते हैं, जो बिना किसी बदलाव के सेट छोड़ देगा (जो आपने अभी बदला है)। मिश्रित का उपयोग करके काम की प्रतिलिपि को रीसेट करता है, लेकिन उन परिवर्तनों को रखता है, और एक कठिन बदलाव से पूरी तरह से छुटकारा मिल जाएगा। यहाँ कुछ स्क्रीनशॉट हैं:

यहां छवि विवरण दर्ज करें


3
यदि आप अभी भी एक आइकन दिखाते हैं, तो पुश दिखा रहा है जो आपके पिछले कमिटमेंट से उपलब्ध है (जिसे आपने अभी मिटा दिया है), पुल और सॉर्सेट्री यूआई को अपडेट करता है।
क्रिस्टोकिवी

6

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

सॉरसेट्री में:

  1. एक कमिट पर क्लिक करें जो आपके द्वारा हटाना चाहते हैं, और " xxxx के बच्चों को अंतःक्रियात्मक रूप से ... " चुनें। आप जिस पर क्लिक करेंगे वह आपका "आधार" होगा और आप उसके बाद किए गए हर कमिट में बदलाव कर सकते हैं।
  2. नई विंडो में, उस कमिट को चुनें, जिसे आप चाहते हैं, और नीचे " डिलीट " -बटन को दबाएं , या फिर कमिट पर क्लिक करें और " डिलीट कमिट " पर क्लिक करें ।
  3. यदि आप गर्भपात करना चाहते हैं तो " ओके " (या " रद्द करें" पर क्लिक करें )।

Sourcetree में इंटरैक्टिव रिबासिंग पर अधिक के लिए इस एटलसियन ब्लॉग पोस्ट को देखें।


यह वह उत्तर है जिसकी मुझे तलाश थी, बिल्कुल आवश्यकतानुसार काम किया।
क्लिफ बर्टन

0

यदि आप किसी अन्य शाखा में हैं, तो आपको पहले इस "कमिट टू चेक" की आवश्यकता है जिसके लिए आप हटाना चाहते हैं, और उसके बाद ही "इस शाखा को वर्तमान शाखा में रीसेट करें" पिछली राइट कमिट को चुनकर काम करेंगे।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.