फ़ाइलों और फ़ोल्डरों सहित अनजाने परिवर्तनों को वापस कैसे करें?


1070

क्या एक कार्यशील पेड़ और इंडेक्स में सभी अनकम्यूटेड परिवर्तनों को वापस करने और नए बनाए गए फ़ाइलों और फ़ोल्डरों को हटाने के लिए एक git कमांड है?



1
खैर, मैंने नीचे दिए गए जवाबों को याद करने के लिए उनके कैविएट और एज केस और "didnt work if you xxx" के साथ, सभी विविध और कठिन पढ़ा है, और पूरे रेपो को हटाने के साथ अटक गया है, सभी संपादित और जोड़े गए फ़ाइलों को हटाने के लिए इसे क्लोन करना । भी केवल दो आदेश है। rm -r projectdir; git क्लोन xxx मेरे लिए यह एक लगातार ऑपरेशन है - इसके साथ एक रेपो प्ले की जांच करें, फिर एक साफ चेकआउट पर वापस जाना चाहते हैं ताकि मैं इसे संशोधित करना शुरू कर सकूं। महान नहीं है, लेकिन 100% काम करता है। एक दिन उम्मीद है कि वे इसके लिए एक सरल आदेश जोड़ देंगे।
जॉन लिटिल

जवाबों:


1770

आप इन दो आदेशों को चला सकते हैं:

# Revert changes to modified files.
git reset --hard

# Remove all untracked files and directories.
# '-f' is force, '-d' is remove directories.
git clean -fd

147
अच्छा विचार 'git क्लीन -nd' चलाने के लिए, git क्लीन चलाने से पहले परिवर्तनों का पूर्वावलोकन करने के लिए यह सुनिश्चित करने के लिए कि आपके पास ऐसी अनछुई फाइलें या निर्देशिकाएं नहीं हैं, जिनके बारे में आपको परवाह है उन्हें हटा दिया जाएगा।
jpw

79
डॉक्स के लिए किसी को बचाने के लिए बचाओ: -f बल है, -d निर्देशिकाओं को हटा रहा है, -n सूखी रन (भी --ryry- रन; अभी तक कुछ भी किए बिना उत्पादन दिखाओ)
हारून कैंपबेल

12
git clean -iएक इंटरैक्टिव मोड के लिए।
गलाथ

इसने मेरी अस्थिर फ़ाइलों को रीसेट नहीं किया, मुझे पहले उन्हें स्टेज करना था।
एरन लोरिंस्क

4
@IgorGanapolsky आप शायद मर्ज संघर्ष के बीच में हैं। दौड़ने की कोशिश करो git merge --abort
इप्टा

555

यदि आप वर्तमान कार्य निर्देशिका में केवल परिवर्तनों को वापस करना चाहते हैं, तो उपयोग करें

git checkout -- .

और इससे पहले, आप उन फ़ाइलों को सूचीबद्ध कर सकते हैं जो वास्तव में बिना कोई कार्रवाई किए वापस हो जाएंगे, बस यह जांचने के लिए कि क्या होगा, साथ में:

git checkout --

1
जब मैं यह कोशिश करता हूं तो मुझे "त्रुटि: pathspec 'मिलता है।" git के लिए ज्ञात किसी भी फ़ाइल (मेलों) से मेल नहीं खाता।
माइक के

34
इस और के बीच अंतर क्या है git reset --hard?
फेलिप अल्मेडा

104
'git reset --hard' मंचन और अस्थिर दोनों परिवर्तनों को पूर्ववत कर देगा, जबकि 'git checkout -'। केवल अस्थिर परिवर्तनों को पूर्ववत करेगा
divideByZero

लेकिन अगर आप चेकआउट का उपयोग करते हैं और आपके पास संशोधित फाइलें हैं, तो cmd वापस आ जाएगी जिसे मुझे मर्ज करने की आवश्यकता है, तब भी जब मुझे केवल इस परिवर्तन को वापस करने की आवश्यकता है
Vinicius Monteiro

7
git checkout - बस उन फाइलों को सूचीबद्ध करेगा जिन्हें वापस किया जाएगा (कोई कार्रवाई नहीं, बस सूची)। यह उपयोगी है यदि आप यह देखना चाहते हैं कि गिट चेकआउट करने से पहले कौन सी फाइलें प्रभावित होंगी -।
कृष्ण श्रीनिवासन

107

वर्किंग डायरेक्टरी में बदलाव को त्यागने के लिए "git checkout - ..." का उपयोग करें

git checkout -- app/views/posts/index.html.erb

या

git checkout -- *

जीआईटी स्थिति में अस्थिर फ़ाइलों में किए गए सभी परिवर्तनों को हटा देता है उदा

modified:    app/controllers/posts.rb
modified:    app/views/posts/index.html.erb

5
git checkout -- *जब तक मैं उस निर्देशिका में काम नहीं करता जब तक कि मैं उस निर्देशिका में नहीं हूँ जहाँ परिवर्तित फ़ाइलें स्थित हैं। पूरे भंडार भर में सभी फाइलों को चेकआउट करने के लिए आपको क्या करना चाहिएgit checkout -- :/
waldyrious

में git checkout -- *, स्टार सभी फ़ाइलें और मौजूदा निर्देशिका में निर्देशिकाओं के साथ, शैल ने ले ली है। तो यह उपनिर्देशिकाओं में जाना चाहिए। इससे मेरा काम बनता है। लेकिन वाक्यविन्यास को उजागर करने के लिए धन्यवाद ": /" जो मेरी राय में क्लीनर को साफ करता है।
mcoolive

53

एक गैर-तुच्छ तरीका है इन दो कमांडों को चलाना:

  1. git stash यह आपके परिवर्तनों को स्‍टेश में ले जाएगा, जिससे आप HEAD की स्थिति में वापस आएंगे
  2. git stash drop यह अंतिम कमांड में बनाए गए नवीनतम स्‍टैश को हटा देगा।

3
यह बिना परिवर्तन किए गए परिवर्तनों के लिए काम नहीं करता है, केवल प्रतिबद्ध परिवर्तन हैं।
b0xxed1n

4
मैंने इसका उपयोग बिना परिवर्तन के किया है और यह काम करता है।
पॉल डी। ईडन

7
@ b0xxed1n स्ट्रैसिंग सभी अनकम्यूटेड परिवर्तनों के बारे में है, और जाहिर है कि यह उनके लिए काम करता है।
TJ

git stash बिना किसी परिवर्तन के सहेजने के लिए किया गया था ताकि आप .. बिना किए उन्हें बचा सकें।
रोब

git stash के परिणाम में निम्नलिखित त्रुटि है:fatal: git-write-tree: error building trees Cannot save the current index state
IgGanapolsky

19
git clean -fd

मदद नहीं की, नई फाइलें बनी रहीं। मैंने जो किया वह पूरी तरह से काम कर रहे पेड़ को हटा रहा है

git reset --hard

देखें " मैं Git में अपने स्थानीय कार्यशील निर्देशिका कैसे साफ़ करूं? सलाह जोड़ने के लिए" -xस्वच्छ करने का विकल्प:

git clean -fdx

नोट -x ध्वज Git द्वारा नजरअंदाज की गई सभी फाइलों को हटा देगा इसलिए सावधान रहें (मेरे द्वारा संदर्भित उत्तर में चर्चा देखें)।


क्या है -fdx? "बल, निर्देशिका और x है?
आदि प्रसादियो

@AdiPrasetyo -x ध्वज सभी उपेक्षित फ़ाइलों को भी हटा देता है; यह एक अवांछित प्रभाव हो सकता है इसलिए मैंने अपना उत्तर अपडेट किया।
Fr0sT

मैं अब भी नहीं कर सकता। मुझे त्रुटि मिलती है: त्रुटि: परिवर्तनों में विलय करने में विफल। पैच 0003 पर विफल रहा। उस पैच की प्रतिलिपि बनाने के लिए वापस कॉल करें जो विफल रही है:
इगोरगानपोलस्की

13

मुझे लगता है कि आप निम्नलिखित कमांड का उपयोग कर सकते हैं: git reset --hard


hhmm ... मैंने ऐसा किया लेकिन मेरी फाइलें अभी भी हैं। क्या मुझे कुछ करना चाहिए?
एमएनएम

1
जीआईटी रीसेट केवल कार्यशील पेड़ में अनअम्मिटेड परिवर्तनों को वापस करता है। यह नई फ़ाइलों और फ़ोल्डरों को नहीं निकालेगा। मुझे यकीन नहीं है कि मुझे कैसे करना है
जोसनिधिन

1
इसलिए, यदि हम नई फ़ाइलों और फ़ोल्डरों को जोड़कर एक सिस्टम डायरेक्टरी को बदलते हैं, और फिर हम उस डायरेक्टरी को पिछली स्थिति में वापस लाना चाहते हैं (उन फ़ाइलों और फ़ोल्डरों को w / आउट), तो हम git के साथ ऐसा नहीं कर सकते हैं? तो सबसे अच्छा हम फ़ाइल राज्यों को वापस कर सकते हैं? लेकिन एक बार जब हम एक फ़ाइल बनाते हैं, तो हम उस फ़ाइल को तब तक नहीं निकाल सकते जब तक हम इसे मैन्युअल रूप से नहीं करते हैं?
एमईएम

6

कृपया ध्यान दें कि अभी भी ऐसी फाइलें हो सकती हैं जो गायब प्रतीत नहीं होंगी - वे एकरूप हो सकती हैं, लेकिन गिट ने उन्हें CRLF / LF परिवर्तनों के कारण संपादित किए जाने के रूप में चिह्नित किया हो सकता है। देखें कि क्या आपने .gitattributesहाल ही में कुछ बदलाव किए हैं ।

मेरे मामले में मैंने .gitattributesफ़ाइल में CRLF सेटिंग्स जोड़ दी हैं और सभी फाइलें इस वजह से "संशोधित फाइल" सूची में बनी हुई हैं। .Gitattributes सेटिंग्स को बदलने से वे गायब हो गए।


6

यदि आपके पास एक अनकम्फर्टेबल चेंज (केवल आपकी वर्किंग कॉपी में) है, जिसे आप अपनी नवीनतम कमेटी में कॉपी में वापस करना चाहते हैं, तो निम्न कार्य करें:

git checkout filename

मैं एक कोशिश के बाद यह कोशिश कर रहा हूँ git rm filename, और यह काम नहीं कर रहा है। error: pathspec 'filename' did not match any file(s) known to git.
झूठे जेब

पूर्ववत करने git rmका हल हैgit checkout master -- filename
झूठा जेब

3

Git 2.23 ने git restoreकार्यशील ट्री फ़ाइलों को पुनर्स्थापित करने के लिए कमांड पेश की ।

https://git-scm.com/docs/git-restore

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

गिट बहाल।

यदि आप अनुक्रमणिका में संस्करण से मिलान करने के लिए सभी सी स्रोत फ़ाइलों को पुनर्स्थापित करना चाहते हैं, तो आप कर सकते हैं

git पुनर्स्थापना '* .c'


1
यह है Git 2.23 , नहीं 2.13
phuclv

2

आप बस निम्नलिखित git कमांड का उपयोग कर सकते हैं जो आपके भंडार में किए गए सभी अपरिवर्तित परिवर्तनों को वापस कर सकता है:

git checkout .

उदाहरण:

ABC@ABC-PC MINGW64 /c/xampp/htdocs/pod_admin (master)
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   application/controllers/Drivers.php
        modified:   application/views/drivers/add.php
        modified:   application/views/drivers/load_driver_info.php
        modified:   uploads/drivers/drivers.xlsx

no changes added to commit (use "git add" and/or "git commit -a")

ABC@ABC-PC MINGW64 /c/xampp/htdocs/pod_admin (master)
$ git checkout .

ABC@ABC-PC MINGW64 /c/xampp/htdocs/pod_admin (master)
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.

nothing to commit, working tree clean

-2

मैं आमतौर पर इस तरह से उपयोग करता हूं जो अच्छी तरह से काम करता है:

mv fold/file /tmp
git checkout fold/file

यह वही है जो प्रस्तावित 357 "पसंद" वाले लड़के का है। केवल यह कि आप नई चेक आउट फ़ाइल का बैकअप भी बनाते हैं।
मथियास

-3

एक सुरक्षित और लंबा रास्ता:

  1. git branch todelete
  2. git checkout todelete
  3. git add .
  4. git commit -m "I did a bad thing, sorry"
  5. git checkout develop
  6. git branch -D todelete

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