download github - मैं गिट में अस्थिर परिवर्तनों को कैसे छोड़ूं?





15 Answers

सभी अस्थिर फ़ाइलों का उपयोग करने के लिए:

git checkout -- .

एक विशिष्ट फ़ाइल उपयोग के लिए:

git checkout path/to/file/to/revert

अंत में अवधि शामिल करना सुनिश्चित करें।

g. i. t.

मैं अपनी कार्यशील प्रति में परिवर्तनों को कैसे हटा सकता हूं जो इंडेक्स में नहीं हैं?




यह वर्तमान निर्देशिका के लिए मौजूदा इंडेक्स को जांचता है, वर्तमान निर्देशिका से फ़ाइलों में सभी परिवर्तनों को नीचे फेंक देता है।

git checkout .

या यह इंडेक्स से सभी फाइलों को जांचता है, काम कर रहे पेड़ फ़ाइलों को ओवरराइट करता है।

git checkout-index -a -f



मेरी पसंदीदा है

git checkout -p

यह आपको चुनिंदा रूप से हिस्सों को वापस करने देता है।

यह भी देखें:

git add -p



मुझे वास्तव में यह आलेख उपयोगी लगता है कि किस आदेश का उपयोग करना है: http://www.szakmeister.net/blog/2011/oct/12/reverting-changes-git/

कुछ अलग-अलग मामले हैं:

  1. यदि आपने फ़ाइल का मंचन नहीं किया है, तो आप git checkout उपयोग करते हैं। चेकआउट "इंडेक्स में संस्करण से मेल खाने के लिए काम करने वाले पेड़ में फाइलें अपडेट करता है"। अगर फाइलों का मंचन नहीं किया गया है (उर्फ इंडेक्स में जोड़ा गया है) ... यह आदेश अनिवार्य रूप से फाइलों को वापस ले जाएगा जो आपकी आखिरी प्रतिबद्धता थी।

    git checkout -- foo.txt

  2. यदि आपने फ़ाइल का मंचन किया है, तो गिट रीसेट का उपयोग करें। एक प्रतिबद्धता से मेल खाने के लिए इंडेक्स को रीसेट करें रीसेट करें।

    git reset -- foo.txt

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

आगे की सलाह के लिए ऊपर दिए गए लेख पर नज़र डालें।




यदि आप अस्थिर परिवर्तनों को रखने में रुचि नहीं रखते हैं (विशेष रूप से यदि चरणबद्ध परिवर्तन नई फाइलें हैं), तो मुझे यह आसान लगता है:

git diff | git apply --reverse



git checkout -f

man git-checkout :

-f, --force

शाखाओं को स्विच करते समय, सूचकांक या काम करने वाला पेड़ हेड से अलग होने पर भी आगे बढ़ें। इसका उपयोग स्थानीय परिवर्तनों को फेंकने के लिए किया जाता है।

इंडेक्स से पथों की जांच करते समय, अनमोल प्रविष्टियों पर असफल न हों; इसके बजाय, अनमोल प्रविष्टियों को नजरअंदाज कर दिया जाता है।




परिवर्तनों को हटाने के बजाय, मैं अपने रिमोट को मूल में रीसेट कर देता हूं। नोट - यह विधि रेपो के लिए अपने फ़ोल्डर को पूरी तरह से पुनर्स्थापित करना है।

इसलिए मैं यह सुनिश्चित करने के लिए ऐसा करता हूं कि जब मैं रीसेट करता हूं तो वे वहां नहीं बैठते हैं (बाद में - उत्पत्ति / ब्रंचनिक पर गिटिनोरेस को छोड़कर)

नोट: यदि आप फ़ाइलों को अभी तक ट्रैक नहीं करना चाहते हैं, लेकिन GITIGNORE में नहीं, तो आप इस चरण को छोड़ना चाहेंगे, क्योंकि यह आपके रिमोट रिपॉजिटरी (धन्यवाद @XtrmJosh) पर नहीं मिले इन अनचाहे फ़ाइलों को मिटा देगा।

git add --all

तब मैं

git fetch --all

फिर मैं मूल पर रीसेट कर दिया

git reset --hard origin/branchname

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

नीचे प्रति उपयोगकर्ता टिप्पणी अपडेट की गई: उपयोगकर्ता द्वारा चालू की जाने वाली मौजूदा शाखा को रीसेट करने के लिए भिन्नता।

git reset --hard @{u}



ऊपर दिए गए सभी समाधानों का प्रयास किया लेकिन अभी भी नई, अस्थिर फ़ाइलों से छुटकारा नहीं मिल सका।

उन नई फ़ाइलों को हटाने के लिए git clean -f का उपयोग करें - हालांकि सावधानी के साथ! बल विकल्प नोट करें।




महज प्रयोग करें:

git stash -u

किया हुआ। आसान।

यदि आप वास्तव में अपने स्टैच स्टैक की परवाह करते हैं तो आप git stash drop साथ अनुसरण कर सकते हैं। लेकिन उस समय आप (Mariusz Nowak से) का उपयोग बंद कर रहे हैं:

git checkout -- .
git clean -df

फिर भी, मुझे git stash -u पसंद है - यह सबसे अच्छा है क्योंकि यह केवल एक कमांड में सभी ट्रैक किए गए और अनचाहे परिवर्तनों को "त्याग देता है"। फिर भी git checkout -- . केवल ट्रैक किए गए परिवर्तनों को छोड़ देता है, और git clean -df केवल git clean -df परिवर्तनों को छोड़ देता है ... और दोनों कमांड टाइप करना बहुत अधिक काम है :)




cd path_to_project_folder  # take you to your project folder/working directory 
git checkout .             # removes all unstaged changes in working directory



कोई फर्क नहीं पड़ता कि आपका रेपो किस राज्य में है, आप हमेशा किसी भी पिछली प्रतिबद्धता पर रीसेट कर सकते हैं:

git reset --hard <commit hash>

यह उस प्रतिबद्धता के बाद किए गए सभी परिवर्तनों को त्याग देगा।




मेरी राय में,

git clean -df

चाल करना चाहिए गिट क्लीन पर गिट दस्तावेज के अनुसार

गिट-क्लीन - काम करने वाले पेड़ से अनचाहे फ़ाइलों को हटा दें

विवरण

वर्तमान निर्देशिका से शुरू होने वाले संस्करण नियंत्रण के अंतर्गत नहीं होने वाली फ़ाइलों को दोबारा हटाकर काम कर रहे पेड़ को साफ़ करता है।

आम तौर पर, गिट को अज्ञात फाइलें हटा दी जाती हैं, लेकिन यदि -x विकल्प निर्दिष्ट किया गया है, तो अनदेखा फ़ाइलों को भी हटा दिया जाता है। यह, उदाहरण के लिए, सभी निर्माण उत्पादों को हटाने के लिए उपयोगी हो सकता है।

यदि कोई वैकल्पिक ... तर्क दिए जाते हैं, केवल वे पथ प्रभावित होते हैं।

विकल्प

-d अनचाहे फ़ाइलों को जोड़ने के अलावा अनचाहे निर्देशिका हटाएं। यदि एक अनचाहे निर्देशिका को एक अलग गिट भंडार द्वारा प्रबंधित किया जाता है, तो इसे डिफ़ॉल्ट रूप से हटाया नहीं जाता है। यदि आप वास्तव में ऐसी निर्देशिका को हटाना चाहते हैं तो -f विकल्प दो बार उपयोग करें।

-f --force अगर गिट कॉन्फ़िगरेशन वैरिएबल क्लीन.रेक्वायरफोर्स गलत पर सेट नहीं है, तो गिट क्लीन को तब तक चलाने से इंकार कर दिया जाएगा जब तक दिया गया -f, -n या -i।




यदि सभी स्टेज्ड फाइलें वास्तव में प्रतिबद्ध की गई थीं, तो शाखा को केवल तीन माउस क्लिक के साथ अपने जीयूआई से रीसेट किया जा सकता है: शाखा , रीसेट , हां !

तो अवांछित स्थानीय परिवर्तनों को वापस करने के लिए मैं अक्सर अभ्यास में क्या करता हूं, सभी अच्छी चीजें करने के लिए, और फिर शाखा को रीसेट करना है।

यदि अच्छी चीजें एक ही प्रतिबद्धता में प्रतिबद्ध होती हैं, तो आप अंततः चरणबद्ध या अस्थिर होने के लिए "अंतिम प्रतिबद्धता में संशोधन" का उपयोग कर सकते हैं यदि आप आखिरकार इसे थोड़ा अलग करना चाहते हैं।

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

तो संक्षेप में, मैं बस प्रतिबद्ध करता हूं , शाखा रीसेट करता हूं , और अंतिम प्रतिबद्धता में संशोधन करता हूं ।




आप अपना खुद का उपनाम बना सकते हैं जो वर्णन करता है कि इसे वर्णनात्मक तरीके से कैसे किया जाए।

मैं परिवर्तनों को त्यागने के लिए अगले उपनाम का उपयोग करता हूं।

काम करने वाले पेड़ में एक (सूची) फ़ाइल में परिवर्तनों को छोड़ दें

discard = checkout --

फिर आप सभी परिवर्तनों को त्यागने के बगल में इसका उपयोग कर सकते हैं:

discard .

या सिर्फ एक फाइल:

discard filename

अन्यथा, यदि आप सभी परिवर्तनों को छोड़ना चाहते हैं और अनचाहे फ़ाइलों को भी छोड़ना चाहते हैं, तो मैं चेकआउट के मिश्रण का उपयोग करता हूं और साफ़ करता हूं:

काम करने वाले पेड़ में बदलावों और अनचाहे फ़ाइलों को साफ और त्यागें

cleanout = !git clean -df && git checkout -- .

तो उपयोग अगले के रूप में सरल है:

cleanout

अब अगले गिथब रेपो में उपलब्ध है जिसमें बहुत सारे उपनाम हैं:




मेरे पास एक अजीब स्थिति थी जहां एक फ़ाइल हमेशा अस्थिर होती है, इससे मुझे हल करने में मदद मिलती है।

गिट आरएम। gitattributes
गिट एड-ए
गिट रीसेट - हार्ड




Related


Tags

git