हटाए गए फ़ाइल को पुनर्प्राप्त करें जहां हटाए जाने के बाद कोई कमिट नहीं किया गया था


812

मैंने कुछ फाइलें हटाईं।

मैंने अभी तक नहीं किया।

मैं फ़ाइलों को पुनर्प्राप्त करने के लिए अपना कार्यक्षेत्र रीसेट करना चाहता हूं।

मैंने ए git checkout .

लेकिन हटाई गई फाइलें अभी भी गायब हैं।

और git statusदिखाता है:

# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   deleted:    cc.properties
#   deleted:    store/README
#   deleted:    store/cc.properties
#

git checkout .कार्यस्थान को रीसेट क्यों नहीं किया जाता है HEAD?


16
यदि आपने हटाने के बाद अपने परिवर्तनों का मंचन नहीं किया है, git checkout .तो ठीक काम होगा।
faizal

10
यदि आप ऐसा करते हैं तो @faizal और आप अपने परिवर्तनों को खो देंगे।
वासिली यॉर्किन

1
बस हटाए गए आइटम पर git gui में Ctrl-J दबाएं।
ऐजेह

git checkout - cc.properties store / README store / cc.properties
विनोद पासी

इस उत्तर को देखें: quora.com/…
live-love

जवाबों:


787

आउटपुट आपको बताता है कि आपको क्या करने की आवश्यकता है। git reset HEAD cc.propertiesआदि।

यह rm ऑपरेशन को अस्थिर करेगा। उसके बाद, git statusफिर से चल रहा है आपको बताएगा कि आपको git checkout -- cc.propertiesफ़ाइल वापस पाने के लिए क्या करना होगा।

अपडेट: मेरे पास मेरी कॉन्फिग फ़ाइल में यह है

$ git config alias.unstage
reset HEAD

जो मैं आमतौर पर अस्थिर सामान के लिए उपयोग करता हूं।


5
आप कई हटाई गई फ़ाइलों के लिए यह कैसे करते हैं? रनिंग गिट रीसेट HEAD << फ़ाइल नाम >> कई बार बोझिल होगा, इसे प्राप्त करने का कोई कुशल तरीका?
सुबुल

70
git reset HEAD \*और फिरgit checkout -- .
नौफाल इब्राहिम

3
लेकिन मेरे पास फाइलें संशोधित हैं।
जियांग वाईडी

@RauliRajande यह संभव है कि आपकी स्थिति मूल प्रश्न में वर्णित एक से अलग हो।
नौफल इब्राहिम

1
rm -r ./engines- उफ़। अब git reset engines; git checkout engines
क्रिश

209

आपने विलोपन का मंचन किया है इसलिए आपको करने की आवश्यकता है:

git checkout HEAD cc.properties store/README store/cc.properties

git checkout . केवल उस इंडेक्स की जाँच करता है जहाँ विलोपन का पहले ही मंचन किया जा चुका है।


177

बस करो git checkout path/to/file-I-want-to-bring-back.txt


8
केवल तभी काम करता है जब फ़ाइलें havent प्रतिबद्ध और धक्का दी गई हैं।
mahen3d

23
मेरे लिए काम नहीं किया, git ने कहा कि यह किसी भी फ़ाइल को उस नाम से नहीं जानता, हालाँकि फ़ाइल ट्रैक की जाती है। मैं या तो प्रतिबद्ध नहीं था, मैंने केवल netbeans के संदर्भ मेनू का उपयोग करके एक फ़ाइल को गलती से हटा दिया।
ज़ेल्फिर कल्टस्टाल

4
@Zelphir +1error: pathspec 'file.ext' did not match any file(s) known to git.
इवान

@ user3479125 मुझे लगता है कि आपकी फ़ाइल कभी कमिट नहीं हुई थी। git statusइसके बारे में क्या कहना है?
ki92

12
Git की स्थिति ने हरी "delated file.ext" git checkout HEAD -- file.extको दिखाया और इसे पुनर्स्थापित करने में मदद की।
इवान बोरशचोव

143

सभी एकल पथों को निर्दिष्ट किए बिना, एक बार में सभी अस्थिर हटाए जाने को पुनर्प्राप्त करने के लिए :

git ls-files -z -d | xargs -0 git checkout --

एक बार में, सभी एकल पथों को निर्दिष्ट किए बिना, सभी चरणबद्ध विलोपन को पुनः प्राप्त करने के लिए :

git status | grep 'deleted:' | awk '{print $2}' | xargs git checkout --

12
मैंने गलती से 500 से अधिक फ़ाइलों को हटा दिया और इसने एक इलाज किया क्योंकि इसने मेरे सभी मान्य परिवर्तनों (पहली पंक्ति जो मैंने उपयोग की है) को रखा। धन्यवाद।
गाय लोव

1
एक सफल निर्माण के ठीक बाद रेपो की सभी सामग्रियों को गलती से हटा दिया गया। पहले कमांड ने मेरी बेकन को बचा लिया।
मोनालिसाओवरड्राइव

2
इससे पहले कि यह मेरे लिए काम करता, मुझे दौड़ना पड़ा git status --long | grep 'deleted:' | awk '{print $2}' | xargs git reset HEAD --
इयान डन

1
बहुत उपयोगी है, अनट्रैक की गई फ़ाइलों को रखना चाहते हैं लेकिन हटाए गए और संशोधित किए गए, संशोधित किए गए हैंडलिंग को बदलने के लिए बस -d से -m में बदल दें।
रायसिनब्रांच क्रंच

5
ध्यान दें कि यदि आपके फ़ाइल नाम / रास्तों में जगह है तो यह काम नहीं करता है। मुझे लगता है कि git ls-files -d | sed -e "s/\(.*\)/'\1'/" | xargs git checkout --काम करेगा।
parsley72

79

चूंकि आप ए git checkout . , ऐसा लगता है कि आप अपनी शाखा को अंतिम प्रतिबद्ध स्थिति में वापस लाने की कोशिश कर रहे हैं।

आप इसे हासिल कर सकते हैं git reset HEAD --hard

चेतावनी

ऐसा करने से आपके सभी नवीनतम संशोधन हट सकते हैं और आपके संशोधनों को रोक सकते हैं, उदाहरण के लिए, आप काम खो सकते हैं। यह वही हो सकता है जो आप चाहते हैं, लेकिन यह सुनिश्चित करने के लिए डॉक्स देखें


39
Woww !! इससे सावधान !!!! आप सही हो सकते हैं, लेकिन कोई भ्रमित हो सकता है और अपना पूरा कोड उड़ा सकता है। यदि आप एक बड़ी चेतावनी जोड़ते हैं तो यह अच्छा होगा।
संततिगोस्सुल्तो

3
मुझे ठीक इसी की आवश्यकता थी। आपके पूरे कोड को उड़ा नहीं देता है - बस आपको आपकी सबसे हाल की प्रतिबद्धताओं पर वापस लाता है।
एंड्रयू हेंड्री

2
मैं एक बिंदु पर सैकड़ों गायब फाइलों के साथ समाप्त हुआ। यह समस्या को ठीक करने का एकमात्र व्यावहारिक तरीका है। धन्यवाद!
जोनाथन बेन

66

अगर तुमने इस्तेमाल किया

git rm filename

तब एक फ़ाइल को हटाने के लिए

git checkout path/to/filename

काम नहीं करता है, इसलिए उस मामले में

git checkout HEAD^ path/to/filename

कार्य करना चाहिए


2
मुझे यह उत्तर पसंद है। इसमें कोई संदेह नहीं है कि आप केवल आपके द्वारा हटाए गए विशिष्ट फ़ाइल को प्रभावित कर रहे हैं । 1) git चेकआउट पथ / से / फ़ाइल नाम 2) git चेकआउट - पथ / / to / फ़ाइल नाम
एडिट ऑफ़ द माउंटेन

अति उत्कृष्ट। git checkout HEAD^ path/to/filenameमेरे लिए तब से काम कर रहा है जब मैंने फ़ाइल को कमिट नहीं किया था।
मूसा नलेदा

29

यहाँ वह आज्ञा है जिसने मेरी मैक पर मदद की। मैंने कुछ अन्य समाधानों की कोशिश की, लेकिन उन्होंने मेरे लिए काम नहीं किया।

OSX Mavericks पर Git संस्करण

mac-pro:main chris$ git version
git version 1.8.5.2 (Apple Git-48)

आदेश

git checkout HEAD -- path/to/file/file.cc


18

git ls-filesहटाए गए (-d) या संशोधित (-m) फ़ाइलों को चेकआउट करने के लिए उपयोग करें ।

git checkout $(git ls-files -d)

देखें कि मैं git चेकआउट पर केवल संशोधित फ़ाइलों को कैसे पुनर्स्थापित कर सकता हूं?


अन्य समाधानों की तुलना में बहुत बेहतर और सरल
joshi123

1
यदि कुछ फ़ाइलों में स्थान है तो आप कर सकते हैं git ls-files -d | xargs -I{} git checkout "{}"
जीन पॉल

17

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

अवधि का उपयोग करना याद रखें क्योंकि यह सभी फाइलों को हथियाने के लिए गिट को बताता है।

यह कमांड सिर को रीसेट करेगा और सभी परिवर्तनों को अनस्टेज करेगा:

$ git reset HEAD . 

फिर सभी फ़ाइलों को पुनर्स्थापित करने के लिए इसे चलाएं:

$ git checkout .

फिर एक git स्टेटस करते हुए, आपको मिलेगा:

$ git status
On branch master
Your branch is up-to-date with 'origin/master'.

यह थोड़े सरल उपाय है और फाइलों के गुच्छा के लिए काम करता है (आपको कई फाइलें / फ़ोल्डर हटा दिए गए हैं)। अच्छा काम यार +
Gokokan

9

क्या आप यह देखना चाहते हैं

उन मामलों के लिए जाता है जहाँ आपने उपयोग किया था

git checkout -- .

इससे पहले कि आप कुछ करें।

आप बनाई गई फ़ाइलों से छुटकारा पाना चाहते हैं जो अभी तक नहीं बनाई गई हैं। और आप उन्हें नहीं चाहते हैं। साथ में :

git reset -- .

आपके द्वारा प्रतिलिपि किए गए उत्तर की पूरी तरह से रिपोर्ट नहीं की है। वास्तव में git checkout -- .हटाए गए फ़ाइलों को पुनर्प्राप्त करने में मदद नहीं करता है और यह पूछने वाले की कोशिश के बराबर है git checkout .:। जो हिस्सा काम कर सकता है वह वह है जिसे आपने कॉपी नहीं किया है git checkout <file_path>:।
जीन पॉल

6

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

$ git reset <commitid#-where-file.cpp-existed> file.cpp

मुझे फ़ाइल वापस लाने के लिए रीसेट के अलावा एक और कदम करना पड़ा:

$ git checkout -- file.cpp

4

यदि आपने कोई परिवर्तन नहीं किया है, तो आपको केवल उन परिवर्तनों को रोकना है और आप अंतिम कार्य करने वाले कमिट में वापस आ जाएंगे।

git stash
git stash clear
git clean 

इसे स्टाॅस स्टैक पर रखना कोई समाधान नहीं है। यह एक हैक है।
रॉबर्ट डॉल्का

2
यहcc अच्छा समाधान है क्योंकि आप इसे स्टैश से हटा सकते हैं। अगर हैक है या नहीं, यह स्वाद की बात है। चोरी का पूरा विचार चतुर हैक है।
बजे ईनो माकितालो

@ EinoMäkitalo को खुशी हुई कि यह आपकी मदद कर सकता है :)
रिक

मुझे यह पसंद है कि सूचीबद्ध सभी लोगों में से सबसे अच्छा है
ckapilla

3

यदि आप एक नष्ट निर्देशिका की तलाश कर रहे हैं।

 git checkout ./pathToDir/*

3

दूसरों की मदद करने के लिए एक संदर्भ के रूप में यहां अलग-अलग मामले हैं:

यदि विलोपन नहीं किया गया है , तो नीचे दी गई कमांड कार्यशील ट्री में हटाए गए फ़ाइल को पुनर्स्थापित करेगी।

$ git checkout -- <file>

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

$ git ls-files --deleted

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

#find the commit hash where it had this file deleted
$ git rev-list -n 1 HEAD -- <file>

यह आपको कुछ देना चाहिए c46e81aa403ecb8a0f7a323a358068345, अब # यहाँ का उपयोग करें

$ git checkout <commit>^ -- <file>

कुछ इस तरह: $ git चेकआउट c46e81aa403ecb8a0f7a323a35808034545 -

यदि आप पुनर्प्राप्त करने के लिए फ़ाइल का पथ देख रहे हैं, तो निम्न आदेश सभी हटाई गई फ़ाइलों का सारांश प्रदर्शित करेगा।

$ git log --diff-filter=D --summary

यदि आप केवल फाइलों की सूची प्रदर्शित करना चाहते हैं:

git log --diff-filter=D --summary | grep "delete mode"

2

मेरे लिए जो काम था वह था git checkout {SHA1 of commit with version to restore} "{path to file to restore}"

उदाहरण के लिए git checkout 5a6b3179e58edff9c90326b9a04284b02fd67bd0 "src-ui/views/includes/radar.pug"

(उस शाखा में निष्पादित जिसे हम फाइल में जाना चाहते हैं)

उसके बाद कमांड निष्पादित होती है, पुनर्स्थापना फ़ाइल मूल स्थान पर मौजूद होगी (जिसे कॉम करने की आवश्यकता होगी)


और / या केवल git checkout master path/to/the/file.binइतना है कि आप बस उस फ़ाइल को बिना किसी अन्य परिवर्तन के खोए बिना हटा दें जो आपने किया हो। पुनश्च: यह स्वीकृत उत्तर होना चाहिए ...
एडोआर्डो

1

यदि आपने ToroiseGIT स्थापित किया है, तो मूल फ़ोल्डर पॉपअप-मेनू के लिए "रिवर्ट ..." मेनू आइटम चुनें।


1

1. उस विशेष प्रतिबद्धता के लिए जिसे आप का उपयोग करके वापस करना चाहते हैं:

   git log
This command will give you a list of commits done by you .

2. उस का उपयोग करने के लिए वापस जाने के लिए:

    git revert <commit id> 

अब आपके पास स्थानीय शाखा में विशेष रूप से सभी फाइलें होंगी


यह काम करता है अगर आपने पहले ही अपने बदलाव शुरू कर दिए हैं।
लाइव-लव

1

चेतावनी: कोई भी काम करें जिसे आप पहले से बनाए रखना चाहते हैं।

आप अपना कार्यक्षेत्र रीसेट कर सकते हैं (और हटाई गई फ़ाइलों को पुनर्प्राप्त कर सकते हैं)

git checkout ./*

2
FYI करें ... इस कमांड ने मेरी सभी वर्किंग फाइल्स को डिलीट कर दिया और डिलीट की गई फाइल को रिकवर नहीं किया। सावधान
hendr1x

यही कारण है कि आप इस कमांड का उपयोग अपने कार्यक्षेत्र को सुरक्षित करने के लिए करते हैं। मैंने सोचा कि यह आत्म व्याख्यात्मक होगा।
हेनरिक फ्लोरिसको

1
यह कमांड काम नहीं करता है क्योंकि यदि फ़ाइल को हटा दिया जाता है, तो इसे पकड़ा नहीं जाएगा ./*
जीन पॉल

@JeanPaul शायद मैं गलत समझ रहा हूं लेकिन इसने मेरे कार्यक्षेत्र को मूल स्थिति में डाल दिया है (अब मौजूद फ़ाइल को हटा दिया गया है)।
मार्क

@Marc यह काम कर सकता है, लेकिन केवल अगर डायरेक्टरी में कोई दिखाई देने वाली फ़ाइल नहीं है, क्योंकि अन्यथा ./*उन्हें git में भेजे जाने से पहले उन फ़ाइलों से मिलान करने के लिए bash द्वारा विस्तारित किया जाएगा।
जीन पॉल

0

मुझे वही समस्या थी लेकिन उपरोक्त में से किसी भी समाधान ने मेरे लिए काम नहीं किया। मैंने जो किया वह समाप्त हो गया:
- एक ही नाम से एक खाली फ़ाइल बनाएँ
- इस फ़ाइल की तुलना इसके स्थानीय इतिहास के साथ करें
- खाली फ़ाइल में इतिहास की प्रतिलिपि बनाएँ।


-1

मुझे भी यही समस्या थी और यहाँ जिन उत्तरों की मैंने कोशिश की उनमें से किसी ने भी मेरे लिए काम नहीं किया। मैं Intellij का उपयोग कर रहा हूं और मैंने git checkout -b minimalExampleफाइलों की एक गुच्छा को हटाकर और परियोजना में दूसरों के एक समूह को संशोधित करके कुछ मुद्दे की नई शाखा पर "न्यूनतम उदाहरण" बनाने के लिए एक नई शाखा की जाँच की थी । दुर्भाग्य से, भले ही मैंने नई "न्यूनतम उदाहरण" शाखा में कोई भी बदलाव नहीं किया है, जब मैंने अपनी "मूल" शाखा को फिर से जांचा तो "न्यूनतम उदाहरण" शाखा से सभी परिवर्तन और विलोपन "में हुए थे" मूल "शाखा भी (या इसलिए यह दिखाई दी)। git statusहटाई गई फ़ाइलों के अनुसार बस दोनों शाखाओं से चले गए थे।

सौभाग्य से, भले ही इंटेलीज ने मुझे चेतावनी दी थी कि "इन फ़ाइलों को हटाना पूरी तरह से पुनर्प्राप्त करने योग्य नहीं हो सकता है", मैं उन्हें परियोजना पर राइट-क्लिक करके और स्थानीय इतिहास का चयन करके उन्हें (उदाहरण के लिए न्यूनतम उदाहरण शाखा से हटा दिया गया था) > इतिहास दिखाएं (और फिर सबसे हालिया इतिहास आइटम जो मैं चाहता था) पर पुनर्स्थापित करें। Intellij ने "न्यूनतम उदाहरण" शाखा में फ़ाइलों को पुनर्स्थापित करने के बाद, मैंने शाखा को मूल में धकेल दिया। फिर मैं अपनी "मूल" स्थानीय शाखा git pull origin minimalExampleमें वापस आ गया और उन्हें "मूल" शाखा में वापस लाने के लिए दौड़ा ।

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