बिना किसी परिवर्तन या सहेजे न किए गए परिवर्तन को पूर्ववत करें


834

मैं अपनी आखिरी प्रतिबद्ध के बाद से सभी परिवर्तनों को पूर्ववत करने की कोशिश कर रहा हूं। मैंने कोशिश की git reset --hardऔर इस पोस्टgit reset --hard HEAD को देखने के बाद । मैं सिर के साथ प्रतिक्रिया करता हूं अब 18c3773 पर है ... लेकिन जब मैं अपने स्थानीय स्रोत को देखता हूं तो सभी फाइलें अभी भी वहां हैं। मैं क्या खो रहा हूँ?


1
यह सीधे
गीथुब

समझने में आसान और पढ़ने में सरल: git-scm.com/book/en/v2/Git-Basics-Undoing-Things
MyTitle

जवाबों:


1619
  • यह उन सभी फाइलों को अनस्टेज कर देगा जिनके साथ आपने मंचित किया होगा git add:

    git reset
    
  • यह सभी स्थानीय अप्रयुक्त परिवर्तनों को वापस कर देगा (रेपो रूट में निष्पादित किया जाना चाहिए):

    git checkout .
    

    आप केवल किसी विशेष फ़ाइल या निर्देशिका में अनियोजित परिवर्तन वापस कर सकते हैं:

    git checkout [some_dir|file.txt]
    

    फिर भी एक और तरीका है कि सभी अनकम्यूटेड परिवर्तन (टाइप करने के लिए लंबा है, लेकिन किसी भी उपनिर्देशिका से काम करता है):

    git reset --hard HEAD
    
  • यह सभी स्थानीय अनट्रैक की गई फ़ाइलों को हटा देगा, इसलिए केवल गिट ट्रैक की गई फ़ाइलें बनी रहेंगी:

    git clean -fdx
    

    चेतावनी: -x द्वारा निर्दिष्ट लोगों सहित सभी उपेक्षित फ़ाइलों को भी हटा देगा .gitignore! आप -nफ़ाइलों को हटाने के लिए पूर्वावलोकन के लिए उपयोग कर सकते हैं ।


इसे योग करने के लिए: नीचे दिए गए आदेशों को निष्पादित करना git cloneमूल स्रोत से ताजा के बराबर है (लेकिन यह कुछ भी फिर से डाउनलोड नहीं करता है, इसलिए यह बहुत तेजी से है):

git reset
git checkout .
git clean -fdx

इसके लिए विशिष्ट उपयोग स्क्रिप्ट के निर्माण में होगा, जब आपको यह सुनिश्चित करना होगा कि आपका पेड़ बिल्कुल साफ है - कोई भी संशोधन या स्थानीय रूप से बनाई गई ऑब्जेक्ट फाइलें या आर्टिफैक्ट्स का निर्माण नहीं करता है, और आप इसे बहुत तेजी से और फिर से काम नहीं करना चाहते हैं- हर एक बार क्लोन रिपोजिटरी।


@turibe जो सही है। मुझे कई बार अपना प्रोजेक्ट शुरू करना पड़ा क्योंकि यह सभी डाउनलोड की गई निर्भरता और मेरे .idea फ़ोल्डर को हटा रहा था। बेहतर समाधान चाहिए।
एरडेव

2
@EresDev, आपको निष्पादित करने की आवश्यकता नहीं है git clean, यह बिना परिवर्तन किए हुए परिवर्तनों को पूर्ववत कर देगा लेकिन सभी अनट्रैक या जोड़े गए फ़ाइलों को रखेगा। लेकिन, यह बिल्ड रिजल्ट को प्रभावित कर सकता है क्योंकि कुछ अनट्रैक फाइल्स में हस्तक्षेप हो सकता है। अगर आपकी .id निर्देशिका दूषित हो गई थी तो क्या होगा?
एमवीपी

git resetमुझे बताता है कि मेरे पास ऐसे बदलाव हैं जिन्हें मुझे बचाने की आवश्यकता है
डैनियल स्प्रिंगर

1
git clean -fdxमेरे node_modulesऔर नष्ट कर दिया .env, महान
fires3as0n

1
@ fires3as0n आपको और क्या उम्मीद थी? यह तो होना ही था। जवाब में चेतावनी भी है।
रिशव

148

यदि आप " अनचाहे " सभी अवांछित परिवर्तन बस चलाना चाहते हैं:

git stash
git stash drop

यदि आपके पास कोई भी अनरैकल्ड फाइल्स हैं (रन करके चेक करें git status), तो इन्हें रन करके हटाया जा सकता है:

git clean -fdx

git stashएक नया स्टैश बनाता है जो स्टैश @ {0} बन जाएगा । यदि आप पहले जांचना चाहते हैं, तो आप git stash listअपने स्टैम्स की सूची देख सकते हैं । यह कुछ इस तरह दिखेगा:

stash@{0}: WIP on rails-4: 66c8407 remove forem residuals
stash@{1}: WIP on master: 2b8f269 Map qualifications
stash@{2}: WIP on master: 27a7e54 Use non-dynamic finders
stash@{3}: WIP on blogit: c9bd270 some changes

प्रत्येक स्टेश का नाम पिछली प्रतिबद्ध गड़बड़ी के नाम पर रखा गया है।


2
एक अच्छा समाधान वास्तव में, लेकिन आपको git add .पहले परिवर्तन का उपयोग करने की आवश्यकता है git stashक्योंकि यह मुझे तब भी बिना किसी बदलाव के दिखा रहा हैgit stash
EresDev

21

वहाँ भी है git stash- जो आपके स्थानीय परिवर्तनों को "चकमा देता है" और बाद में फिर से लागू किया जा सकता है या यदि आवश्यक नहीं है तो गिरा दिया जा सकता है

अधिक जानकारी पर ठोकर


12

मैं स्रोत पेड़ का उपयोग कर रहा हूँ .... आप 2 आसान चरणों के साथ सभी अन-कम किए गए परिवर्तनों को वापस कर सकते हैं:

1) बस कार्यक्षेत्र फ़ाइल स्थिति को रीसेट करने की आवश्यकता है

यहां छवि विवरण दर्ज करें 2) सभी अस्थिर फाइलें (कमांड + ए) का चयन करें, राइट क्लिक करें और निकालें का चयन करें

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

यह इतना आसान है: डी


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

10

मैं जो करता हूं

git add . (adding everything)
git stash 
git stash drop

एक लाइन: git add . && git stash && git stash drop


यह सबसे अच्छा है
Madrugada

7

जो लोग यहां पहुंच सकते हैं, उनके लिए यदि वे पूर्ववत कर सकते हैं git clean -f -d, जिसके द्वारा ग्रहण में बनाई गई एक फ़ाइल को हटा दिया गया था,

आप रेफरी के लिए "स्थानीय इतिहास से पुनर्स्थापना" का उपयोग करके यूआई से ऐसा कर सकते हैं: स्थानीय इतिहास से पुनर्स्थापित करें


3
मैंने वोट डाउन नहीं किया लेकिन आपका उत्तर आपके इरादे से कम है; यदि आप उत्तर में पहले वाक्य को फिर से लिखना चाहते हैं तो इससे मदद मिलेगी।
मार्क शुल्त्स

5

एक कमेटी से नई कमेटी में परिवर्तन करने वाले राज्य

0. last commit,i.e. HEAD commit
1. Working tree changes, file/directory deletion,adding,modification.
2. The changes are staged in index
3. Staged changes are committed

राज्य परिवर्तन के लिए कार्रवाई

0->1: manual file/directory operation
1->2: git add .
2->3: git commit -m "xxx"

जाँच अलग

0->1: git diff
0->2: git diff --cached
0->1, and 0->2: git diff HEAD
last last commit->last commit: git diff HEAD^ HEAD

लास्ट कमिट में वापस

2->1: git reset
1->0: git checkout .     #only for tracked files/directories(actions include modifying/deleting tracked files/directories)
1->0: git clean -fdx     #only for untracked files/directories(action includes adding new files/directories)
2->1, and 1->0: git reset --hard HEAD

कुछ भी फिर से डाउनलोड किए बिना, जीआईटी क्लोन के बराबर

git reset && git checkout . && git clean -fdx

मैं यह नहीं देखता कि यह कैसे पूछे गए प्रश्न से संबंधित है। यह अजीब व्यंजनों की सिर्फ श्रृंखला है, बिना किसी वास्तविक पदार्थ के।
mvp
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.