git गिट में एक फ़ाइल की कामकाजी प्रति संशोधनों को पूर्ववत करें?




file version-control (10)

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

हालांकि, मैं केवल उस फ़ाइल की कामकाजी प्रतिलिपि को पूर्ववत करना चाहता हूं, इसके साथ कुछ भी नहीं।

मैं उसको कैसे करू?


यदि आपने अभी तक अपनी प्रतिबद्धता को धक्का नहीं दिया है या अन्यथा साझा नहीं किया है:

git diff --stat HEAD^...HEAD | \
fgrep filename_snippet_to_revert | cut -d' ' -f2 | xargs git checkout HEAD^ --
git commit -a --amend

यदि यह पहले से ही प्रतिबद्ध है, तो आप फ़ाइल के लिए परिवर्तन वापस कर सकते हैं और फिर से प्रतिबद्ध कर सकते हैं, फिर अंतिम प्रतिबद्धता के साथ नई प्रतिबद्धता को स्क्वैश कर सकते हैं।


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

git checkout filename

यह मौजूदा शाखा से नवीनतम संस्करण के साथ फ़ाइल नाम को प्रतिस्थापित करेगा।

चेतावनी: आपके परिवर्तनों को त्याग दिया जाएगा - कोई बैकअप नहीं रखा गया है।


मेरे लिए केवल यह काम किया

git checkout -p filename


मैं SHA आईडी का उपयोग करके अपनी फ़ाइलों को पुनर्स्थापित करता हूं, मैं क्या करता हूं git checkout <sha hash id> <file name>


यदि आपकी फ़ाइल पहले ही चरणबद्ध है (तब होता है जब फ़ाइल संपादित होने के बाद आप गिट एड आदि करते हैं) आपके परिवर्तनों को अस्थिर करने के लिए।

उपयोग

git reset HEAD <file>

फिर

git checkout <file>

यदि पहले से ही चरणबद्ध नहीं है, तो बस उपयोग करें

git checkout <file>

यह उत्तर स्थानीय परिवर्तनों को पूर्ववत करने के लिए आवश्यक कमांड के लिए है जो एकाधिक या एकाधिक फ़ोल्डर्स (या निर्देशिका) में एकाधिक विशिष्ट फ़ाइलों में हैं। यह उत्तर विशेष रूप से ऐसे प्रश्नों को संबोधित करते हैं जहां उपयोगकर्ता के पास एक से अधिक फ़ाइल होती है लेकिन उपयोगकर्ता सभी स्थानीय परिवर्तनों को पूर्ववत नहीं करना चाहता:

यदि आपके पास एक या अधिक फाइलें हैं, तो आप उन फ़ाइलों में से प्रत्येक को सैम कमांड ( git checkout -- file ) लागू कर सकते हैं, जिसमें से प्रत्येक स्थान को अंतरिक्ष द्वारा अलग किया गया है:

git checkout -- name1/name2/fileOne.ext nameA/subFolder/fileTwo.ext

नाम 1 / name2 / fileOne.ext nameA / subFolder / fileTwo.ext के बीच स्पेस अबाउट को ध्यान में रखें

एक ही फ़ोल्डर में एकाधिक फ़ाइलों के लिए:

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

git checkout -- name1/name2/*

उपरोक्त में तारांकन नाम 1 / name2 के तहत उस स्थान पर सभी फ़ाइलों को पूर्ववत करने की चाल करता है।

और, समान रूप से निम्नलिखित एकाधिक फ़ोल्डरों के लिए सभी फ़ाइलों में परिवर्तन पूर्ववत कर सकते हैं:

git checkout -- name1/name2/* nameA/subFolder/*

फिर उपरोक्त में नाम 1 / name2 / * nameA / subFolder / * के बीच की जगह को ध्यान में रखें।

नोट: name1, name2, nameA, subFolder - इन सभी उदाहरण फ़ोल्डर नाम फ़ोल्डर या पैकेज को इंगित करते हैं जहां प्रश्न में फ़ाइल मौजूद हो सकती है।


मैंने गिट बैश के माध्यम से किया है:

(use "git checkout -- <file>..." to discard changes in working directory)

  1. गिट स्थिति [इसलिए हमने एक फ़ाइल वैड संशोधित देखा है।]
  2. गिट चेकआउट - index.html [मैं index.html फ़ाइल में बदल गया है:
  3. गिट स्थिति [अब उन परिवर्तनों को हटा दिया गया था]


यदि आप उस फ़ाइल में पिछले प्रतिबद्धताओं के परिवर्तनों को पूर्ववत करना चाहते हैं, तो आप इसे आजमा सकते हैं:

git checkout branchname^ filename

यह फ़ाइल को चेकआउट करेगा क्योंकि यह अंतिम प्रतिबद्धता से पहले था। यदि आप कुछ और वापस जाना चाहते हैं, तो branchname~n नोटेशन का उपयोग करें।


आप उपयोग कर सकते हैं

git checkout -- file

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

आप फ़ाइल का एक विशेष संस्करण भी देख सकते हैं:

git checkout v1.2.3 -- file         # tag v1.2.3
git checkout stable -- file         # stable branch
git checkout origin/master -- file  # upstream master
git checkout HEAD -- file           # the version from the most recent commit
git checkout HEAD^ -- file          # the version before the most recent commit




undo