हटाए गए फ़ोल्डर को Git repo में पुनर्स्थापित करें


99

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

इसलिए मैंने कुछ शोध किया और देखा कि आप एक फ़ाइल को वापस कर सकते हैं git checkout <revision> -- <name of file>

लेकिन वह केवल फाइलों पर काम करता है।

मैं निर्देशिका के अंदर सभी फ़ाइलों को कैसे पुनः प्राप्त कर सकता हूं?


1
git statusआपको चलाने के बारे में क्या संकेत देता है
तवीयन बार्न्स

1
ऐसा लगता है कि आपके पास अभी भी आपके दूरस्थ रेपो में पुरानी निर्देशिका है (और आपके स्थानीय रेपो में भी हो सकती है)। मजबूत सफलता: 1) अपने रिमोट रेपो से एक नया रेपो में "पुल" करें (अपने स्थानीय रेपो को कोई अधिक नुकसान न करें)। 2) अपने नए, स्थानीय, रेपो: atlassian.com/git/tutorials/undoing-changes/git-revert में "चेकआउट" ... या "रिवर्ट" करने का प्रयास करें । 3) रिमोट रेपो को अपडेट करें जब आप सुनिश्चित करें कि सब कुछ ठीक है।
पल्सम ४

जवाबों:


253

सब कुछ आप एक फ़ाइल के साथ कर सकते हैं, आप एक फ़ोल्डर के साथ भी कर सकते हैं।

नोट हटाए गए फ़ाइल को Git रिपॉजिटरी में ढूंढें और पुनर्स्थापित करें


फ़ाइलें काम के पेड़ से हटा दी जाती हैं लेकिन अभी तक प्रतिबद्ध नहीं हैं:

यदि आपने अभी तक अनुक्रमित नहीं किया है ( git add) आपके परिवर्तन आप किसी निर्देशिका की सामग्री को वापस ला सकते हैं:

git checkout -- path/to/folder

यदि विलोपन पहले से ही अनुक्रमित है, तो आपको पहले रीसेट करना चाहिए:

git reset -- path/to/folder
git checkout -- path/to/folder


पूर्ण कार्यशील ट्री (एक भी फ़ोल्डर नहीं) को पुनर्स्थापित करें, लेकिन सभी अनकम्फर्ड परिवर्तनों को खो दें

git reset --hard HEAD


जब अतीत में कुछ कमिट में फाइलें डिलीट हो जाती हैं:

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

git rev-list -n 1 HEAD -- <file_path>

फिर कैरेट ( ^) सिंबल का उपयोग करते हुए पहले वाले संस्करण को चेकआउट करें :

git checkout <deleting_commit>^ -- <file_path>


पूर्ण कार्य करने वाले पेड़ को दूर की प्रतिबद्ध से पुनर्स्थापित करें

git reset --hard <revision> 

1
git checkout -- path/to/folder/* काम नहीं करता है ध्यान दें: सवाल यह है कि एक फ़ोल्डर को कैसे बहाल किया जाए फाइल नहीं
gman

@gman का How can I retrieve all the files inside the directoryमतलब डायरेक्टरी और उसकी फाइल्स दोनों से है। लेकिन कमांड सर्प्राइज़िंग मेरे लिए भी काम नहीं करता है। मुझे याद है यह एक साल पहले किया था।
निक वोल्किन

2
@gman लेकिन यह git checkout -- pathया की तरह काम करता है git checkout -- 'path/*'। अपने उदाहरण में आप git rmओपी को ऐसा नहीं करते हैं। मैंने ऐसे मामले के लिए निर्देश जोड़ दिए हैं। धन्यवाद!
निक वोल्किन

3
विंडोज पर आपको इस तरह उद्धरण देने की आवश्यकता है:git checkout "<deleting_commit>^" -- <file_path>
Maor

इसने पूरे रेपो में सामान का एक गुच्छा अस्थिर कर दिया, भले ही मैंने रीसेट कमांड पर एक फ़ोल्डर निर्दिष्ट किया हो। इसका अर्थ कैसे निकलता है? जब मैंने चेकआउट किया तो ऐसा लग रहा था कि यह मेरे फ़ोल्डर को पुनर्स्थापित कर रहा है। मुझे नहीं पता कि मेरे कोड के बाकी हिस्सों को क्या नुकसान हुआ, आह एक सहकर्मी की सहकर्मी को सहकर्मी रिपॉजिटरी प्रबंधक को केंद्रीकृत रिपोज के लिए इस्तेमाल किया जा रहा है।
पॉल केनजोरा

5

यदि आपने अभी तक अपने परिवर्तनों की सराहना नहीं की है तो आप सामग्री या निर्देशिका को वापस कर सकते हैं:

git checkout -- removed_directory

यदि आप सभी परिवर्तनों को वापस करना चाहते हैं:

git reset --hard HEAD

3
git checkout -- removed_directory काम नहीं करता
gman

git checkout -- removed_directoryमेरे लिए काम किया है, लेकिन मैंने इस निर्देशिका को पहले ( checkoutउस निर्देशिका में फ़ाइलों में से एक) बनाया है। निर्माण के बाद सभी फाइलें इस कमांड द्वारा फ़ोल्डर में बहाल कर दी गईं।
बूलियन_Type

5

आप फ़ाइलों या फ़ोल्डर को जीआईटी पुनर्स्थापना के साथ पुनर्स्थापित कर सकते हैं।

git restore --source master~1 "PATH_IN_YOUR_REPO"

यहां, मास्टर ~ 1 आपके फ़ोल्डर को आपकी मास्टर शाखा से "1" पुनरीक्षण में बदल देता है।

स्रोत: https://git-scm.com/docs/git-restore


4

मेरे लिए काम करने वाली एकमात्र चीज़ रेपो को किसी अन्य फ़ोल्डर में जांचना था। मान लें कि वर्तमान रेपो में है /home/me/current

मैंने तब किया था

git clone /home/me/current /home/me/temp

यह रेपो में एक अलग क्लोन बनाता है /home/me/temp

मैं अब /home/me/tempजो चाहे कर सकता हूं और जा सकता हूं। उदाहरण के लिए

git reset --hard commit-hash-before-delete

अब मैं हटाए गए फ़ाइल फ़ोल्डर को वापस कॉपी कर सकता हूं

cp -r /home/me/temp/some/deleted/folder /home/me/current/some/deleted/folder

और अस्थायी फ़ोल्डर को हटा दें

rm -rf /home/me/temp

के उदाहरण हैं

git checkout -- some/deleted/folder
git checkout -- some/deleted/folder/*

कम मत करो

$ git checkout -- some/deleted/folder/*
zsh: no matches found: some/deleted/folder/*
$ git checkout -- some/deleted/folder
error: pathspec 'some/deleted/folder' did not match any file(s) known to git.

अन्य उदाहरण जैसे

git reset --hard HEAD

नष्ट कर दिया फ़ाइलों से परे विनाशकारी हैं। कोई अन्य परिवर्तन भी खो जाएगा।

उसी प्रकार

git reset --hard some-commit

के बाद कोई भी कमिट खो देगा some-commit


2

2.24.0 git के रूप में, एक प्रायोगिक नई git कमांड है: git Restore

git restore --staged some/deleted/folder

यह मुझे दिखाता है: 'पुनर्स्थापना' एक git कमांड नहीं है
अहमद सी

0

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

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

(मैं एक नई शाखा में प्रयोग करने की सलाह दूंगा।)


0

यदि आप केवल हटाए गए फ़ोल्डर को पुनर्प्राप्त करने के लिए देख रहे हैं और आपके पास हटाए जाने के बाद अन्य कमिट हैं, तो आप सिर्फ github.com पर अपने प्रोजेक्ट को भी प्राप्त कर सकते हैं।

Github.com से, आप अपने अंतिम प्रतिबद्ध पर जाएं जिसमें आपका फ़ोल्डर है। आपको कमिटेड मैसेज देखना चाहिए और दाईं ओर "ब्राउज फाइल्स" नामक एक बटन है। इसे क्लिक करने से आप कमिट के उस चरण की सभी फाइलों तक पहुंच जाएंगे।

वहां से आप कोड को क्लोन कर सकते हैं या कोड को ज़िप के रूप में डाउनलोड कर सकते हैं।


-1

बिना हटाए गए विलोपन के लिए, यह इस रूप में सरल है:

git रीसेट HEAD rel / पाथ / टू / डिलीट / डायरेक्टरी / *

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