शाखा में किए गए सभी परिवर्तनों को कैसे छोड़ें?


116

मैं एक शाखा (यानी design) में काम कर रहा हूं और मैंने कई बदलाव किए हैं, लेकिन मुझे उन सभी को त्यागने और रिपॉजिटरी संस्करण से मिलान करने के लिए इसे रीसेट करने की आवश्यकता है। मैंने सोचा था git checkout designकि यह करूंगा, लेकिन यह मुझे बताता है कि मैं पहले से ही शाखा में हूं designऔर मेरे पास 3 संशोधित फाइलें हैं।

मैं उन परिवर्तनों को कैसे छोड़ूंगा और शाखा प्राप्त करूंगा क्योंकि यह अब दूरस्थ सर्वर पर है?

जवाबों:


207

नोट: आप इसे UNDO नहीं कर सकते

कोशिश करें कि git checkout -fयह उन सभी स्थानीय परिवर्तनों को छोड़ देगा जो सभी शाखाओं और मास्टर में प्रतिबद्ध नहीं हैं ।


86

यदि आप अपनी अंतिम प्रतिबद्धता के बाद से सब कुछ फेंकना चाहते हैं तो git reset --hard आपकी मदद कर सकता है


6
याgit reset --hard HEAD^
डेडफिश

28
git reset --hard HEAD^वास्तव में स्वीकृत उत्तर होना चाहिए। ओपी अन्य शाखाओं के बारे में नहीं पूछ रहा था ...
vphilipnyc

2
मैंने यह कोशिश की, और मुझे लगता है कि यह मेरा आखिरी धक्का था, न कि केवल मेरे आखिरी कमिटमेंट से।
रॉबर्ट्स

3
मैंने जीआईएटी रीसेट की कोशिश की - हेड और ^ यह अभी भी अनट्रैक फ़ाइलों का एक गुच्छा छोड़ दिया है। अब google में उन्हें एक साधारण कमांड में कैसे हटाएं।
जॉन दीघन

20
git diff master > branch.diff
git apply --reverse branch.diff

ये चरण बहुत उपयोगी हो सकते हैं, यदि आपका लक्ष्य मास्टर शाखा के बराबर होने के लिए एक विशिष्ट शाखा की स्थिति निर्धारित करता है। ऐसा करने के लिए, इसे विशिष्ट शाखा के भीतर से चलाएं, और फिर [शाखा नाम] को हटा दें। जब उपयोग किया जाए तो फाइल करेंgit rm [branch name].diff
karolus

18

यदि आप इसमें कोई बदलाव नहीं चाहते हैं designऔर निश्चित रूप से यह चाहते हैं कि यह किसी दूरस्थ शाखा से मेल खाए, तो आप केवल शाखा को हटा भी सकते हैं और इसे फिर से बना सकते हैं:

# Switch to some branch other than design
$ git br -D design
$ git co -b design origin/design            # Will set up design to track origin's design branch

7
यह भी: गिट चेकआउट डिजाइन; git रीसेट - भार उत्पत्ति / डिज़ाइन
Dan

मैं शाखा हटाने से पहले भी प्रतिबद्ध
करूंगा

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

1
@erewok: ठीक है, सवाल विशेष रूप से कहता है कि पूछने वाला सभी परिवर्तनों को छोड़ना चाहता है।
मिपाडी

और मुझे नहीं लगता कि यह जवाब हासिल करता है।
एरवाक

7

@Will, गिट विसर्जन वास्तव में अच्छा और सरल ट्यूटोरियल है। यह आपको दिखाएगा कि निम्न मामलों के लिए पूर्ववत कैसे करें: अस्थिर, मंचित और प्रतिबद्ध। लैब 14-18


2
मैं सिर्फ इतना कहना चाहूंगा कि मैंने अब एक साल से अधिक समय तक विसर्जन किया है। OI! मैं इतना जल्दी ही यह किया जाना चाहिए था ...
विल

1
इसे Rubyस्थापित करने की आवश्यकता
विष्णु

5

जब आप अपनी स्थानीय शाखा में परिवर्तनों को छोड़ना चाहते हैं, तो आप इन परिवर्तनों को git stash कमांड का उपयोग करके रोक सकते हैं।

git stash सेव "some_name"

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



0

सभी परिवर्तनों को त्यागने की विधि:

मुझे यह सवाल मर्ज करने के बाद मिला और चेकआउट को भूलकर तुरंत बाद में विकसित होना पड़ा । आपने यह अनुमान लगाया: मैंने सीधे मास्टर पर कुछ फाइलों को संशोधित करना शुरू किया । डी 'ओह! जैसा कि मेरी स्थिति शायद ही अनूठी है (हमने यह सब किया है, हम नहीं; ->), मैं एक ऐसा उलटा तरीका पेश करूँगा कि मैं मास्टर की तरह फिर से विकसित होने के लिए सभी बदलावों को छोड़ दूंगा ।

यह git diffदेखने के लिए कि फ़ाइलों को संशोधित करने और मेरी त्रुटि के दायरे का आकलन करने के बाद, मैंने निष्पादित किया:

git stash
git stash clear

पहले सभी परिवर्तनों को टालने के बाद, उन्हें अगली मंजूरी दे दी गई। मास्टर को त्रुटि में फ़ाइलों में किए गए सभी परिवर्तन चले गए थे और समता बहाल हो गई थी।

मान लीजिए कि मैं अब उन परिवर्तनों को पुनर्स्थापित करना चाहता था। मे यह कर सकती हु। पहला कदम है कि मैं सिर्फ साफ / गिराया गया हैश का हैश ढूंढता हूं:

git fsck --no-reflog | awk '/dangling commit/ {print $3}'

हैश सीखने के बाद, मैंने सफलतापूर्वक इसके साथ असम्बद्ध परिवर्तनों को पुनर्स्थापित किया:

git stash apply hash-of-cleared-stash

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

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

किसी भी तरह, यदि आप एक शाखा में परिवर्तन को साफ़ करने का प्रतिवर्ती साधन चाहते हैं, तो पूर्वगामी इस उपयोग के मामले में कम खतरनाक तरीका है।


-1

git checkout -f

यह आपके प्रश्न के लिए पर्याप्त है। केवल एक चीज है, एक बार किया गया, उसका किया हुआ। कोई पूर्ववत नहीं है।

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