दिलचस्प पोस्ट
क्या IE 8 की संख्या प्रति पृष्ठ स्टाइलशीट की संख्या पर है? IE 8 में जावास्क्रिप्ट ऑब्जेक्ट। बिंड () विधि की कमी को कैसे नियंत्रित करें सी / सी ++ में एक कोर डंप प्रोग्राम करने के लिए कैसे करें बेस 64 छवियाँ एम्बेड करना PHP में register_shutdown_function () का उपयोग करके घातक त्रुटियों को संभालें मुझे पता है कि कॉलबैक फ़ंक्शन अतुल्यकालिक रूप से चलता है, लेकिन क्यों? स्थिति रिश्तेदार बनाम स्थिति निरपेक्ष? रिलेशनल डेटाबेस में प्रमुख मूल्य जोड़े पंक्ति-स्तरीय ट्रिगर बनाम स्टेटमेंट-स्तरीय ट्रिगर बिगडीकिल। दिवाइड के दौरान फेंका गया अंकगणितीय अपवाद PHP में opendir () में वर्णानुक्रम में डायरेक्टरी सूची को सॉर्ट करें और प्रदर्शित करें .NET में रेफ़ और आउट पैरामीटर में अंतर स्थिति नामों की एक सरणी को बनाए रखने के बिना, PHP में एक स्थिति कोड कैसे भेजा जाए? नेटवर्क स्ट्रीम के कुछ कारण क्या हैं। एक खंड की कॉल की संख्या की गणना

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

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

मुझे पता है कि मैं git checkout HEAD^ foo.bar का उपयोग कर फ़ाइल को चेकआउट कर सकता git checkout HEAD^ foo.bar , लेकिन मुझे यह नहीं पता है कि उस फ़ाइल को हटा दिया गया था।

  1. किसी दिए गए फ़ाइल नाम को हटाए जाने के लिए प्रतिबद्ध करने का सबसे तेज़ तरीका क्या होगा?
  2. उस फाइल को मेरी काम की कॉपी में वापस लाने का सबसे आसान तरीका क्या होगा?

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

Solutions Collecting From Web of "जीआईटी रिपॉजिटरी में हटाई हुई फ़ाइल को ढूंढें और पुनर्स्थापित करें"

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

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

फिर पहले प्रतिबद्धता के संस्करण को चेक करें ( ^ ) प्रतीक का उपयोग करके:

 git checkout <deleting_commit>^ -- <file_path> 

या एक कमांड में, यदि $file प्रश्न में फाइल है

 git checkout $(git rev-list -n 1 HEAD -- "$file")^ -- "$file" 
  1. git log --diff-filter=D --summary उपयोग करें git log --diff-filter=D --summary सभी कमिट्स प्राप्त करने के लिए जो फ़ाइलों और फ़ाइलों को नष्ट कर दी गई हैं;
  2. हटाए गए फ़ाइल को पुनर्स्थापित करने के लिए git checkout $commit~1 filename का उपयोग करें

एक फ़ोल्डर में उन सभी नष्ट कर दिया फ़ाइलों को पुनर्स्थापित करने के लिए निम्न आदेश दर्ज करें

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

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

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

यदि आप पागल हो, तो git-bisect उपयोग करें यहाँ क्या करना है:

 git bisect start git bisect bad git bisect good <some commit where you know the file existed> 

अब स्वचालित परीक्षण चलाने का समय है शेल कमांड '[ -e foo.bar ]' 0 foo.bar यदि foo.bar मौजूद है और 1 अन्यथा। git-bisect का "रन" कमांड द्विआधारी खोज का उपयोग स्वचालित रूप से पहले कमिट को खोजने के लिए करेगा जहां परीक्षण विफल हो जाता है। यह शुरूआती सीमा के माध्यम से (अच्छा से बुरे) के बीच शुरू होता है और निर्दिष्ट परीक्षा के परिणाम के आधार पर आधा में इसे काटता है

 git bisect run '[ -e foo.bar ]' 

अब आप प्रतिबद्ध हैं जो इसे हटा दिया। यहां से, आप भविष्य में वापस कूद सकते हैं और बदलाव को पूर्ववत करने के लिए git-revert का उपयोग कर सकते हैं,

 git bisect reset git revert <the offending commit> 

या आप एक प्रतिबद्ध वापस जा सकते हैं और मैन्युअल रूप से क्षति का निरीक्षण कर सकते हैं:

 git checkout HEAD^ cp foo.bar /tmp git bisect reset cp /tmp/foo.bar . 

बोनीसीय के उत्तर ( अपवत्त ) पर आधारित मेरा नया पसंदीदा उपनाम, और " गिट अलियास कमांड के लिए एक बहस पास करें " के बारे में मेरा अपना जवाब:

 git config alias.restore '!f() { git checkout $(git rev-list -n 1 HEAD -- $1)~1 -- $(git diff --name-status $(git rev-list -n 1 HEAD -- $1)~1 | grep '^D' | cut -f 2); }; f' 

मैंने एक फ़ाइल खो दी है, कुछ कमियां पहले गलती से हटा दी हैं?
शीघ्र:

 git restore my_deleted_file 

संकट टली।


रॉबर्ट डाइली ने निम्नलिखित उपनामों की टिप्पणी में प्रस्ताव दिया है :

 restore-file = !git checkout $(git rev-list -n 1 HEAD -- "$1")^ -- "$1" 

और जेगन टिप्पणी में कहते हैं:

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

 git config --global alias.restore "\!git checkout \$(git rev-list -n 1 HEAD -- \"\$1\")^ -- \"\$1\"" 

यदि आप फ़ाइल नाम जानते हैं, तो यह बुनियादी आज्ञाओं के साथ एक आसान तरीका है:

उस फ़ाइल के लिए सभी कमानों की सूची बनाएं

 git log -- path/to/file 

आखिरी प्रतिबद्ध (सर्वोच्च) उस फ़ाइल को हटा दिया गया है। तो आपको प्रतिबद्ध करने के लिए दूसरे को पुनर्स्थापित करना होगा।

 git checkout {second to last commit} -- path/to/file 

हटाए गए और समर्पित फ़ाइल को पुनर्स्थापित करने के लिए:

 git reset HEAD some/path git checkout -- some/path 

यह गीट संस्करण 1.7.5.4 पर परीक्षण किया गया था।

मुझे यह समाधान मिल गया है

  1. कमिट का आईडी प्राप्त करें जहां फाइल को नीचे दिए गए तरीकों में से किसी एक का उपयोग कर हटा दिया गया था।

    • git log --grep=*word*
    • git log -Sword
    • git log | grep --context=5 *word*
    • git log --stat | grep --context=5 *word* git log --stat | grep --context=5 *word* # अनुशंसित अगर आपको शायद कुछ भी याद न हो
  2. आपको कुछ मिलना चाहिए:

commit bfe68bd117e1091c96d2976c99b3bcc8310bebe7 लेखक: अलेक्जेंडर ऑरलोव दिनांक: गुरु 12 12:44:27 2011 +0200

 replaced deprecated GWT class - gwtI18nKeySync.sh, an outdated (?, replaced by a Maven goal) I18n generation script 

commit 3ea4e3af253ac6fd1691ff6bb89c964f54802302 लेखक: अलेक्जेंडर ऑरलोव दिनांक: गुरु 12 मई 22:10:22 2011 +0200

3 अब commit id bfe68bd117e1091c96d2976c99b3bcc8310bebe7 का उपयोग कर:

 git checkout bfe68bd117e1091c96d2976c99b3bcc8310bebe7^1 yourDeletedFile.java 

जैसा कि प्रतिबद्ध आईडी आपको पहले ही हटा दिया गया था, जहां फ़ाइल पहले ही हटा दी गई थी, आपको bfe68b से पहले ही प्रतिबद्ध करने की आवश्यकता है, जिसे आप ^1 जोड़कर कर सकते हैं इसका मतलब है: मुझे सिर्फ bfe68b से पहले प्रतिबद्ध करें।

यदि आपने केवल परिवर्तन किए हैं और एक फ़ाइल को हटा दिया है, लेकिन इसे कमाने के लिए नहीं, और अब आप अपने परिवर्तनों के साथ तोड़ गए हैं

 git checkout -- . 

लेकिन आपकी नष्ट कर दी गई फ़ाइलें वापस नहीं आईं, आप केवल निम्न कमांड करते हैं:

 git checkout <file_path> 

और ताकतवर, आपकी फ़ाइल वापस आ गई है

 git checkout /path/to/deleted.file 

कई मामलों में, यह गिट के साथ संयोजन के रूप में कोर्यूटils (जीआरपी, एसएडी, आदि) का उपयोग करने के लिए उपयोगी हो सकता है। मैं पहले से ही इन उपकरणों को अच्छी तरह से जानता हूं, लेकिन Git कम इतना। यदि मैं किसी हटाई गई फ़ाइल की खोज करना चाहता हूं, तो मैं निम्नलिखित कार्य करूँगा:

 git log --raw | grep -B 30 $'D\t.*deleted_file.c' 

जब मुझे संशोधन / प्रतिबद्ध लगता है:

 git checkout <rev>^ -- path/to/refound/deleted_file.c 

जैसे दूसरों ने मुझसे पहले कहा है

फाइल को अब उस स्थिति में बहाल किया जाएगा जिसे हटाने से पहले था। अगर आप उसे चारों ओर रखना चाहते हैं, तो उसे काम के पेड़ पर फिर से लेना याद रखें।

git undelete path/to/file.ext

  1. इसे अपने .bash_profile (या अन्य प्रासंगिक फाइल में रखो जो कि जब आप कमांड शेल खोलते हैं) लोड करते हैं:

     git config --global alias.undelete '!sh -c "git checkout $(git rev-list -n 1 HEAD -- $1)^ -- $1" -' 
  2. फिर उपयोग करें:

     git undelete path/to/file.ext 

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

इसलिए मुझे किसी खास प्रतिबद्ध से हटाए गए फ़ाइलों के एक समूह को पुनर्स्थापित करना पड़ा और मैंने इसे दो आदेशों के साथ प्रबंधित किया:

 git show <rev> --diff-filter=D --summary --name-only --no-commit-id | xargs git checkout <rev>^ -- git show <rev> --diff-filter=D --summary --name-only --no-commit-id | xargs git reset HEAD 

(प्रत्येक आदेश के अंत में पीछे वाले स्थान पर ध्यान दें।)

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

हमारे मामले में हमने गलती से फाइलों को एक कमिट में हटा दिया था और कुछ बाद में हमने अपनी गलती का एहसास किया और वे सभी फाइलें वापस करना चाहते थे जो हटाए गए थे लेकिन जो संशोधित नहीं थे

चार्ल्स बेली के उत्कृष्ट उत्तर के आधार पर मेरी एक लाइनर है:

 git co $(git rev-list -n 1 HEAD -- <file_path>)~1 -- $(git diff --name-status $(git rev-list -n 1 HEAD -- <file_path>)~1 head | grep '^D' | cut -f 2) 
 user@bsd:~/work/git$ rm slides.tex user@bsd:~/work/git$ git pull Already up-to-date. user@bsd:~/work/git$ ls slides.tex ls: slides.tex: No such file or directory 

हटाए गए फ़ाइल को पुनर्स्थापित करें:

 user@bsd:~/work/git$ git checkout D .slides.tex.swp D slides.tex user@bsd:~/work/git$ git checkout slides.tex user@bsd:~/work/git$ ls slides.tex slides.tex 

यदि आप जानते हैं कि फाइल को नष्ट कर दिया गया है, तो इस आदेश को चलाएं जहां <SHA1_deletion> कमिट है जो फ़ाइल को हटा दी गई है:

 git diff --diff-filter=D --name-only <SHA1_deletion>~1 <SHA1_deletion> | xargs git checkout <SHA1_deletion>~1 -- 

पाइप से पहले का हिस्सा सभी फाइलों को सूचीबद्ध करता है जो कमिट में हटाए गए थे; वे उन सभी को बहाल करने के लिए पिछले प्रतिबद्ध से चेकआउट हैं।

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