क्या वर्किंग डायरेक्टरी से अनकम्यूटेड बदलावों को पुनर्प्राप्त करने का कोई तरीका है git reset --hard HEAD
?
git reset --hard somewhere
वास्तव में कुछ खतरनाक आदेशों में से एक है।
क्या वर्किंग डायरेक्टरी से अनकम्यूटेड बदलावों को पुनर्प्राप्त करने का कोई तरीका है git reset --hard HEAD
?
git reset --hard somewhere
वास्तव में कुछ खतरनाक आदेशों में से एक है।
जवाबों:
आप सामान्य रूप से वापस नहीं किए गए परिवर्तन प्राप्त कर सकते हैं ।
पहले किए गए परिवर्तनों ( git add
) का अनुक्रमणिका ऑब्जेक्ट से पुनर्प्राप्त करने योग्य होना चाहिए, इसलिए यदि आपने किया है, तो इससे git fsck --lost-found
संबंधित ऑब्जेक्ट का पता लगाने के लिए उपयोग करें। (यह .git/lost-found/
निर्देशिका को ऑब्जेक्ट्स लिखता है ; वहां से आप git show <filename>
प्रत्येक फ़ाइल की सामग्री को देखने के लिए उपयोग कर सकते हैं ।)
यदि नहीं, तो यहां उत्तर होगा: अपने बैकअप को देखें। शायद आपका संपादक / IDE / tmp या C: \ TEMP और इस तरह की चीज़ों के तहत अस्थायी प्रतियां संग्रहीत करता है। [१]
git reset HEAD@{1}
यह पिछले HEAD को पुनर्स्थापित करेगा
[१] विम जैसे वैकल्पिक रूप से लगातार पूर्ववत भंडार, ग्रहण आईडीई स्थानीय इतिहास को संग्रहीत करता है ; ऐसी सुविधाएँ आपके ** को बचा सकती हैं
इस से उत्तर एसओ
$ git reflog show
93567ad HEAD@{0}: reset: moving to HEAD@{6}
203e84e HEAD@{1}: reset: moving to HEAD@{1}
9937a76 HEAD@{2}: reset: moving to HEAD@{2}
203e84e HEAD@{3}: checkout: moving from master to master
203e84e HEAD@{4}: reset: moving to HEAD~1
9937a76 HEAD@{5}: reset: moving to HEAD~1
d5bb59f HEAD@{6}: reset: moving to HEAD~1
9300f9d HEAD@{7}: commit: fix-bug
# said the commit to be recovered back is on 9300f9d (with commit message fix-bug)
$ git reset HEAD@{7}
आपको अपना दिन वापस मिल गया! :)
git checkout HEAD@{19}
मुझे एक अलग राज्य में खो फ़ाइलों की जाँच करने की अनुमति दी। तब git checkout -b new-branch-name
उन्हें "संलग्न" स्थिति में रेपो में वापस जोड़ दिया जाता था।
git checkout -b new-branch-name
। Git को सरल शब्दों में समझाने के लिए Pragmatic Version Control पुस्तक का उपयोग करना अच्छा है।
मैं गलती से git reset --hard
आज भी अपने रेपो पर चला गया, जबकि आज भी बहुत से बदलाव हुए हैं। इसे वापस पाने के लिए, मैं भागा git fsck --lost-found
, जिसने लिखा था कि सभी अपरिवर्तित बूँदें <path to repo>/.git/lost-found/
। चूँकि फाइलें अप्राप्त थीं, इसलिए मैंने उन्हें other
निर्देशिका के भीतर पाया <path to repo>/.git/lost-found/
। वहां से, मैं उपयोग किए जा रहे अप्रकाशित फ़ाइलों को देख सकता हूं, ब्लब्स को git show <filename>
कॉपी कर सकता हूं और उनका नाम बदल सकता हूं।
नोट: यह केवल तभी काम करता है जब आप उन फ़ाइलों को जोड़ते हैं जिन्हें आप अनुक्रमणिका में सहेजना चाहते हैं (उपयोग करके git add .
)। यदि फ़ाइलें अनुक्रमणिका में नहीं थीं, तो वे खो गई हैं।
lost-found
। लेकिन मैं तब git show
सामग्री प्राप्त करने के लिए कर सकता था ।
#!/bin/bash cd PATH_TO_PROJECT/.git/lost-found/other FILES=* COUNTER = 0 for f in $FILES do echo "Processing $f file..." git show $f > "PATH_TO_RECOVERY_DIRECTORY/$COUNTER.m" let COUNTER=COUNTER+1 done
हाँ, आप गिट में एक हार्ड रीसेट से प्राप्त कर सकते हैं ।
उपयोग:
git reflog
अपनी प्रतिबद्धता का पता लगाने के लिए। फिर उपयोग करें:
git reset --hard <commit-id-retrieved-using-reflog>
इस ट्रिक ने मेरे जीवन को एक दो बार बचाया।
आप यहाँ पर रीफ़्लॉग के दस्तावेज़ पा सकते हैं ।
git reset --hard
दूसरे का उपयोग करने से पुनर्प्राप्त करने के लिए काउंटर सहज ज्ञान युक्त लग सकता है, git reset --hard
लेकिन यदि आप --hard
स्विच का उपयोग नहीं करते हैं , तो आपको अपने कार्यक्षेत्र में प्रविष्टियों के साथ छोड़ दिया जाएगा जो आपके द्वारा पुनर्प्राप्त किए गए कार्य को प्रभावी ढंग से वापस कर देंगे।
git log
हूं तो मैंने कमिट की आईडी नहीं देखी। साथ git reflog
मैं देख सकता आईडी प्रतिबद्ध
जब मैं एक स्थानीय परियोजना पर काम कर रहा था, मैं इसे गिटहब में स्थानांतरित करना चाहता था और फिर एक नया भंडार बनाया। जब मैं .itignore के साथ इन सभी फाइलों को नई रिपॉजिटरी में जोड़ने की कोशिश कर रहा था, तो मैंने गलती से एक गलत फ़ाइल जोड़ दी और फिर इसे खाली करने की कोशिश की।
मैं भागा git reset --hard origin/master
: पी
फिर मेरी सभी स्थानीय फ़ाइलें हटा दी गईं क्योंकि रेपो खाली था। मुझे लगा कि सब कुछ खत्म हो गया है।
इससे मेरी जान बच गई:
git reflog show
git reset HEAD@{1}
git push
आशा है कि यह एक और जीवन बचाता है।
git reset HEAD@\{27\}
, धन्यवाद!
git reflog show
जांच करने के लिए उपयोग करता हूं और उस पहले कमिट से मैं उपयोग करता हूंgit reset HEAD@{number}
यदि आप इंटेलीज जैसे कुछ का उपयोग करते हैं:
संदर्भ मेनू पर, स्थानीय इतिहास चुनें, और सबमेनू पर इतिहास दिखाएं पर क्लिक करें:
किसी प्रोजेक्ट या फ़ोल्डर के लिए स्थानीय इतिहास दृश्य आपको वह सब कुछ दिखाता है जो आपने पिछले कुछ दिनों के दौरान किया है। डायलॉग बॉक्स के निचले हिस्से के एक्शन कॉलम में, उस एक्शन को चुनें, जिसे आप वापस रोल करना चाहते हैं। [...] ऐसा करते हुए, संवाद बॉक्स का ऊपरी भाग बदले हुए फ़ाइलों के ट्री दृश्य दिखाता है। यदि आप केवल हटाए गए फ़ाइल को पुनर्स्थापित करना चाहते हैं, तब से किए गए अन्य परिवर्तनों की परवाह किए बिना, आप ट्री व्यू में फाइल लॉस्टटैक्स का चयन कर सकते हैं और रिवर्ट बटन पर क्लिक कर सकते हैं।
http://blog.jetbrains.com/idea/2008/01/using-local-history-to-restore-deleted-files/
इसने मेरी गांड को आग से बाहर निकाल दिया!
git reflog
काम नहीं किया क्योंकि मैंने बदलाव नहीं किए। git fsck --lost-found
मंचन फ़ाइलों के लिए काम किया है, लेकिन उन सभी का मंचन नहीं किया गया। इंटेलीज के स्थानीय इतिहास ने मेरी बिना सहेजे फाइलों को पूरी तरह से पुनर्प्राप्त कर लिया, मैं इस सुविधा के लिए बहुत आभारी हूं
मैंने अभी- git reset --hard
अभी अपने सभी uncommitted परिवर्तन खो दिए हैं। सौभाग्य से, मैं एक संपादक (IntelliJ) का उपयोग करता हूं और मैं स्थानीय इतिहास से परिवर्तनों को पुनर्प्राप्त करने में सक्षम था। ग्रहण को आपको ऐसा करने की अनुमति देनी चाहिए।
परिभाषा के अनुसार, git reset --hard
जीआईटी के लिए उन्हें पुनर्प्राप्त करने के लिए किसी भी तरह से बिना किसी बदलाव के फेंक दिया जाएगा (आपकी बैकअप प्रणाली मदद कर सकती है, लेकिन गिट नहीं)।
वास्तव में, बहुत कम मामले हैं जहां git reset --hard
एक अच्छा विचार है। ज्यादातर मामलों में, एक ही काम करने के लिए एक सुरक्षित आदेश है:
यदि आप अपने अन-कम किए गए परिवर्तनों को फेंकना चाहते हैं, तो उपयोग करें git stash
। यह इन परिवर्तनों का एक बैकअप रखेगा, जो आपके चलने पर कुछ समय बाद समाप्त हो जाएगा git gc
। यदि आप 99.9% सुनिश्चित हैं कि आपको इन परिवर्तनों को वापस करने की आवश्यकता नहीं होगी, तो git stash
0.1% मामले के लिए अभी भी आपका मित्र है। यदि आप 100% सुनिश्चित हैं, तो git stash
अभी भी आपका मित्र है क्योंकि इन 100% में माप त्रुटि है; ;-)
यदि आप HEAD
इतिहास में अपनी और वर्तमान शाखा की नोक को स्थानांतरित करना चाहते हैं , तो git reset --keep
आपका मित्र है। यह वही काम git reset --hard
करेगा, जो आपके स्थानीय परिवर्तनों को नहीं करेगा ।
यदि आप दोनों करना चाहते हैं, तो git stash && git reset --keep
आपका दोस्त है।
अपनी उंगलियों का उपयोग न करना सिखाएं git reset --hard
, यह एक दिन वापस भुगतान करेगा।
git stash && git reset --hard
जो किसी भी सामग्री को मिटा देगा तो क्या यह सही है?
git reset --hard
स्टैश को त्यागना नहीं है। इस अर्थ में git stash
एक प्रतिस्थापन git reset --hard
है कि यह आपके वर्कट्री से अनपेक्षित परिवर्तनों को हटा देता है, सिवाय इसके कि यह उन्हें स्थायी रूप से छोड़ने के बजाय सुरक्षित रखता है।
यदि आप गलती से एक हार्ड रीसेट करते हैं, तो ऐसा करें,
git reflog show
git reset HEAD@{2} // i.e where HEAD used to be two moves ago - may be different for your case
यह मान HEAD@{2}
लेना कि आप वापस जाने की इच्छा रखते हैं
यह वही है जो मैं आमतौर पर करता हूं अगर मैं कुछ बदलाव खो देता हूं।
git reflog
git checkout <commit id> // now you are in where you want but you cannot push from detached branch to master
manually copy and paste changes from detached branch to master or working branch
git reset --hard HEAD // if needed
git add ... > git commit ... > git push ...
पॉइंटर को अपने पिछले कमिट्स में ले जाने के लिए git reset --soft dadada
सूचना खो जाती है।
चूँकि आपने प्रतिबद्ध नहीं किया, इसलिए आपके .it ने यह जानकारी कभी संग्रहीत नहीं की। तो, मूल रूप से git
आप के लिए यह ठीक नहीं हो सकता।
लेकिन, यदि आपने अभी-अभी किया है git diff
, तो एक तरीका है कि आप टर्मिनल आउटपुट का उपयोग करके निम्नलिखित 3 सरल चरणों को प्राप्त कर सकते हैं।
git diff
। एक फ़ाइल में ओ / पी सहेजें को diff.patch कहा जाता हैpatch -p1 < diff.patch
) लागू करेंआप बच गए! :)
नोट: जब आप डेटा को टर्मिनल से किसी फ़ाइल में कॉपी कर रहे हैं, तो सावधान रहें और स्पष्ट रूप से देखें कि डेटा निरंतर आउटपुट है और इसमें कोई अनावश्यक डेटा (ऊपर और नीचे तीर दबाने के कारण) नहीं है। अन्यथा आप इसे गड़बड़ कर सकते हैं।
मैं एक ही मुद्दे में भाग गया और मैं लगभग पागल हो रहा था .... शुरू में मैंने परियोजना को प्रतिबद्ध किया और विलय कर दिया .. बाद में जब मैंने दौड़ने की कोशिश की तो मुझे git push --set-upstream origin master
यह त्रुटि मिल रही थी
fatal: refusing to merge unrelated histories
इसलिए मैं भाग गया git reset --hard HEAD
और इसने 3 सप्ताह की परियोजना को हटा दिया लेकिन नीचे दिए गए ये कुछ आदेश दिन बचाते हैं:
git reset HEAD@{1} //this command unstage changes after reset
git fsck --lost-found //I got the dangling commit fc3b6bee2bca5d8a7e16b6adaca6a76e620eca4b
git show <dangling commit something like-> fc3b6bee2bca5d8a7e16b6adaca6a76e620eca4b>
git rebase fc3b6bee2bca5d8a7e16b6adaca6a76e620eca4b
उम्मीद है की यह मदद करेगा
आप एक करने के बाद वापस कमिट कर सकते हैं reset --hard HEAD
।
git reflog
के इतिहास की जाँच करने के लिए " " का उपयोग करेंHEAD
शाखा में ।
आपको यहाँ पर अपना कमिटमेंट और उसकी आईडी दिखाई देगी।
ए करें
git reset {commit Id of the commit you want to bring back}
मुझे यह पता चला कि git reset --hard <commit>
जीआईटी के इतिहास से हटने से पहले किसी भी तरह की अनकही फाइलें हालाँकि, मैं भाग्यशाली था कि मैंने अपने कोड संपादक सत्र को पूरे समय खुले रखा था, जब मैं अपने बालों को बाहर निकाल रहा था, तो मुझे पता चला कि control + z
प्रभावित फ़ाइलों में से प्रत्येक में एक साधारण फ़ाइल के राज्य को वापस Git से पहले संस्करण में वापस कर दिया गया है अनिवार्य रूप से सब कुछ रीसेट करें जो मैंने विशेष रूप से नहीं पूछा।Hooray!!
git reset HEAD@{4}
4 4 चरणों से पहले परिवर्तन है। यदि आप एक सही कदम चुनते हैं, तो यह उन फ़ाइलों की सूची दिखा सकता है जिन्हें आपने हार्ड से हटाया था। फिर करो:
$ git reflog show
यह आपको स्थानीय प्रतिबद्ध इतिहास दिखाने जा रहा है जो हमने पहले ही बनाया है। अब करते हैं:
$ git reset --hard 8c4d112
8c4d112 एक कोड है जिसे आप अपनी हार्ड रीसेट करना चाहते हैं। अधिक जानकारी प्राप्त करने के लिए आइए https://www.theserverside.com/video/How-to-use-the-git-reset-hard-command-to-change-a-commit-history पर देखें ।
सही उत्तर। ठीक है, अब मुझे गिट पसंद है। :-) यहाँ एक सरल नुस्खा है।
git log HEAD@{2}
git reset --hard HEAD@{2}
जहाँ "2" आपके परिवर्तनों को करने के लिए पीछे की संख्या है। मेरे मामले में, कुछ बिल्ड मुद्दे पर डिबग करने में मदद करने के लिए सहयोगी और बॉस द्वारा बाधित; इसलिए, दो बार एक रीसेट किया; इसलिए, HEAD और HEAD @ {1} ओवर-राइट थे। वाह, हमारी कड़ी मेहनत का नुकसान हुआ होगा।
मैंने किया git reset --hard
गलती से गलत प्रोजेक्ट पर काम किया (मुझे पता है ...)। मैंने सिर्फ एक फ़ाइल पर काम किया था और यह कमांड चलाने के दौरान और उसके बाद भी खुला था।
भले ही मैंने प्रतिबद्ध नहीं किया था, मैं पुरानी फ़ाइल को सरल के साथ पुनर्प्राप्त करने में सक्षम था COMMAND + Z
।
यदि आप Netbeans पर विकास कर रहे हैं, तो फ़ाइल टैब और फ़ाइल संपादन क्षेत्र के बीच देखें। एक "स्रोत" और "इतिहास" है। "इतिहास" पर आपको संस्करण नियंत्रण (git / अन्य) का उपयोग करके किए गए परिवर्तन दिखाई देंगे, लेकिन स्थानीय रूप से किए गए परिवर्तन भी। इस मामले में, स्थानीय परिवर्तन आपको बचा सकते हैं।
( उपयोगकर्ताओं के सबसेट के लिए उपयुक्त उत्तर )
यदि आप (हाल के किसी भी) macOS पर हैं, और यहां तक कि अगर आप अपने टाइम मशीन डिस्क से दूर हैं, तो OS ने स्थानीय स्नैपशॉट्स नामक घंटे के बैकअप को बचाया होगा ।
टाइम मशीन दर्ज करें और आपके द्वारा खोई गई फ़ाइल पर नेविगेट करें। OS आपसे तब पूछेगा:
The location to which you're restoring "file.ext" already contains an
item with the same name. Do you want to replace it with the one you're
restoring?
आपके द्वारा खोई गई फ़ाइल को पुनर्प्राप्त करने में सक्षम होना चाहिए।
यदि आपके पास एक ही कोड के साथ एक आईडीई खुला था, तो प्रत्येक व्यक्तिगत फ़ाइल पर ctrl + z करने का प्रयास करें जिसे आपने बदलाव किया है। इसने मुझे जीआईटी रीसेट --हार्ड करने के बाद मेरे अन-कम किए गए परिवर्तनों को पुनर्प्राप्त करने में मदद की।
जब हम git रीसेट करते हैं - हार्ड और सभी स्थानीय अनमैक्ड परिवर्तन हटा दिए जाते हैं। परिवर्तनों को वापस प्राप्त करने के लिए - फ़ाइल पर IDE क्लिक में, स्थानीय इतिहास के साथ फ़ाइल की तुलना करें जो दिनांक के अनुसार परिवर्तनों को सूचीबद्ध करेगा और हम डेटा को पुनर्प्राप्त कर सकते हैं। आपका दिन बच गया!
git reset
। आपको उस आदेश की आवश्यकता नहीं है और यह खतरनाक है, इसलिए इसका उपयोग न करें। शाखा को पिछली ओर वापस करने के लिए या तोgit rebase -i
आप उस शाखा को छोड़ना चाहते हैं जोgit checkout
( या सिर को अलग नहीं करता है )git branch -M
शाखा टिप को स्थानांतरित करने के लिए। पहले स्थानीय परिवर्तनों के साथ चलने से इंकार कर देगा और बाद में तभी चलेगा जब स्थानीय रूप से संशोधित फाइलें संशोधन के बीच भिन्न न हों।