git - मैं गिट प्रबंधित प्रोजेक्ट में पिछले सभी राज्यों में सभी स्थानीय परिवर्तनों को कैसे वापस कर सकता हूं?




revert git-checkout (8)

मेरे पास एक प्रोजेक्ट है जिसमें मैंने git init चलाया। कई काम करने के बाद, मैंने git status जिसने मुझे बताया कि सबकुछ अद्यतित था और इसमें कोई स्थानीय बदलाव नहीं था।

तब मैंने लगातार कई बदलाव किए और महसूस किया कि मैं सबकुछ दूर फेंकना चाहता हूं और अपनी मूल स्थिति में वापस आना चाहता हूं। क्या यह आदेश मेरे लिए यह करेगा?

git reset --hard HEAD

पुन: क्लोन

GIT=$(git rev-parse --show-toplevel)
cd $GIT/..
rm -rf $GIT
git clone ...
  • ✅ स्थानीय, गैर-धक्का देता है
  • Track ट्रैक किए गए फ़ाइलों में किए गए परिवर्तनों को वापस लाता है
  • ✅ आपके द्वारा हटाई गई ट्रैक की गई फ़ाइलों को पुनर्स्थापित करता है
  • G .gitignore में सूचीबद्ध फाइलें / डीआईआर हटाता है (जैसे फाइलें बनाना)
  • ✅ फ़ाइलों / डीआईआर को हटा देता है जिन्हें ट्रैक नहीं किया जाता है और नहीं .gitignore
  • 😀 आप इस दृष्टिकोण को भूल नहीं पाएंगे
  • 😔 वेस्ट बैंडविड्थ

निम्नलिखित अन्य आदेश हैं जिन्हें मैं रोज भूल जाता हूं।

स्वच्छ और रीसेट करें

git clean -f -d -x
git reset --hard
  • Local स्थानीय, गैर-धक्का देने वाले कामों को हटा नहीं देता है
  • Track ट्रैक किए गए फ़ाइलों में किए गए परिवर्तनों को वापस लाता है
  • ✅ आपके द्वारा हटाई गई ट्रैक की गई फ़ाइलों को पुनर्स्थापित करता है
  • G .gitignore में सूचीबद्ध फाइलें / डीआईआर हटाता है (जैसे फाइलें बनाना)
  • ✅ फ़ाइलों / डीआईआर को हटा देता है जिन्हें ट्रैक नहीं किया जाता है और नहीं .gitignore

स्वच्छ

git clean -f -d -x
  • Local स्थानीय, गैर-धक्का देने वाले कामों को हटा नहीं देता है
  • Track ट्रैक किए गए फ़ाइलों में किए गए परिवर्तनों को वापस नहीं लाता है
  • You आपके द्वारा हटाई गई ट्रैक की गई फ़ाइलों को पुनर्स्थापित नहीं करता है
  • G .gitignore में सूचीबद्ध फाइलें / डीआईआर हटाता है (जैसे फाइलें बनाना)
  • ✅ फ़ाइलों / डीआईआर को हटा देता है जिन्हें ट्रैक नहीं किया जाता है और नहीं .gitignore

रीसेट

git reset --hard
  • Local स्थानीय, गैर-धक्का देने वाले कामों को हटा नहीं देता है
  • Track ट्रैक किए गए फ़ाइलों में किए गए परिवर्तनों को वापस लाता है
  • ✅ आपके द्वारा हटाई गई ट्रैक की गई फ़ाइलों को पुनर्स्थापित करता है
  • G .gitignore में सूचीबद्ध फाइलें / डीआईआर हटाता है (जैसे फाइलें बनाना)
  • Files उन फ़ाइलों / डीआईआर को हटा नहीं देता है जिन्हें ट्रैक नहीं किया गया है और नहीं .gitignore

टिप्पणियाँ

उपरोक्त सभी की पुष्टि करने के लिए टेस्ट केस (बैश या sh का उपयोग करें):

mkdir project
cd project
git init
echo '*.built' > .gitignore
echo 'CODE' > a.sourceCode
mkdir b
echo 'CODE' > b/b.sourceCode
cp -r b c
git add .
git commit -m 'Initial checkin'
echo 'NEW FEATURE' >> a.sourceCode
cp a.sourceCode a.built
rm -rf c
echo 'CODE' > 'd.sourceCode'

यह भी देखें

  • git revert करने के लिए नए काम करता है जो पूर्ववत करता है
  • पूर्व प्रतिबद्धताओं के समय में वापस जाने के लिए git checkout (पहले आदेशों के ऊपर चलने की आवश्यकता हो सकती है)
  • git stash ऊपर git reset समान है, लेकिन आप इसे पूर्ववत कर सकते हैं

उत्तरों का एक गुच्छा पढ़ने और उन्हें आजमाने के बाद, मुझे विभिन्न किनारे के मामलों का पता चला है जिसका मतलब है कि कभी-कभी वे कामकाजी प्रति को पूरी तरह साफ नहीं करते हैं।

ऐसा करने के लिए मेरी वर्तमान बैश स्क्रिप्ट यहां दी गई है, जो हर समय काम करती है।

#!/bin/sh
git reset --hard
git clean -f -d
git checkout -- HEAD

काम करने की प्रतिलिपि रूट निर्देशिका से चलाएं।


डेंजर अहमद: (कृपया टिप्पणियां पढ़ें। मेरे उत्तर में प्रस्तावित आदेश निष्पादित करने से आप जितना चाहें उतना अधिक हटा सकते हैं)

मुझे चलाने वाली निर्देशिकाओं सहित सभी फ़ाइलों को पूरी तरह से निकालने के लिए

git clean -f -d

नोट: आप भी दौड़ना चाहते हैं

git clean -fd

जैसा

git reset --hard

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

जब आप त्रुटि संदेश प्राप्त करते हैं तो यह भी विशेष रूप से उपयोगी होता है

~"performing this command will cause an un-tracked file to be overwritten"

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

इस स्थिति में, एक ड्राई रन करने से आपको उन फ़ाइलों की एक सूची दिखाने में मदद मिलेगी जो ओवरराइट की जाएंगी।


मैं एक समान समस्या से मुलाकात की। इसका समाधान यह देखने के लिए git log का उपयोग करना है कि स्थानीय प्रतिबद्धता का कौन सा संस्करण रिमोट से अलग है। (जैसे संस्करण 3c74a11530697214cbcc4b7b98bf7a65952a34ec )।

फिर परिवर्तन को वापस करने के लिए git reset --hard 3c74a11530697214cbcc4b7b98bf7a65952a34ec का उपयोग करें।


मैंने एक समान मुद्दे की खोज की,

स्थानीय प्रतिबद्धताओं को फेंकना चाहता था:

  1. भंडार क्लोन (गिट क्लोन)
  2. देव शाखा में स्विच (गिट चेकआउट देव)
  3. कुछ काम करता है (गिट प्रतिबद्ध-एम "प्रतिबद्ध 1")
  4. लेकिन रिमोट (मूल / देव) पर वापस जाने के लिए इन स्थानीय प्रतिबद्धताओं को फेंकने का फैसला किया

तो नीचे किया था:

git reset --hard origin/dev

चेक:

git status  

        On branch dev  
        Your branch is up-to-date with 'origin/dev'.  
        nothing to commit, working tree clean  

अब स्थानीय काम खो गए हैं, प्रारंभिक क्लोन राज्य पर, ऊपर बिंदु 1।


यदि आप सभी परिवर्तनों को वापस करना चाहते हैं और वर्तमान रिमोट मास्टर के साथ अद्यतित होना चाहते हैं (उदाहरण के लिए आप पाते हैं कि मास्टर हेड आगे बढ़ गया है क्योंकि आपने इसे बंद कर दिया है और आपका पुश 'अस्वीकार कर दिया जा रहा है') आप इसका उपयोग कर सकते हैं

git fetch  # will fetch the latest changes on the remote
git reset --hard origin/master # will set your local branch to match the representation of the remote just pulled down.

स्थानीय शाखा में असामान्य सभी परिवर्तनों को वापस करने के लिए इसे आज़माएं

$ git reset --hard HEAD

लेकिन अगर आपको इस तरह की त्रुटि दिखाई देती है:

fatal: Unable to create '/directory/for/your/project/.git/index.lock': File exists.

आप '.git' फ़ोल्डर पर नेविगेट कर सकते हैं फिर index.lock फ़ाइल हटाएं:

$ cd /directory/for/your/project/.git/
$ rm index.lock

Finaly, फिर से आदेश चलाओ:

$ git reset --hard HEAD






git-checkout