दिलचस्प पोस्ट
रीफ्रैर-राउटर यूआरएल काम नहीं करते हैं जब मैन्युअल रूप से रीफ्रेश करना या रिक्ति करना IOS 7 मल्टीटास्किंग स्विचर में स्क्रीनशॉट को नियंत्रित करना वैश्विक ध्वज के साथ एक RegExp गलत परिणाम क्यों दे रहा है? मैं UIPageControl के पृष्ठांकन अंक के रंग कैसे बदल सकता हूँ? जावास्क्रिप्ट में आप एक स्ट्रिंग को कैसे बदल सकते हैं? क्वेरी के लिए पैरामीटर कैसे पास करें? बुलियन ऑपरेटर में अंतर: & बनाम && और | बनाम || file_get_contents (): SSL ऑपरेशन कोड 1 के साथ विफल हुआ। और अधिक एंड्रॉइड – स्क्रीनशॉट प्रोग्राम को कैसे लें कैसे जावास्क्रिप्ट में एक स्ट्रिंग के सभी घटनाओं को बदलने के लिए? ब्राउज़र प्रिंट इवेंट का पता लगा रहा है ब्राउज़र ऑटोफिल का पता लगा रहा है त्रुटि: 'स्थानीय MySQL सर्वर से सॉकेट के माध्यम से कनेक्ट नहीं किया जा सकता' /var/run/mysqld/mysqld.sock '(2)' एक पायथन स्क्रिप्ट के भीतर से UAC उन्नयन का अनुरोध करें? किसी ListView पर चयनित आइटम का पृष्ठभूमि का रंग बदलें

मैं git रीसेट कैसे कर सकता हूं – हार्ड हेड ~ 1?

क्या निम्न कमांड के कारण हुए बदलावों को पूर्ववत करना संभव है? यदि हां, तो कैसे?

git reset --hard HEAD~1 

वेब के समाधान से एकत्रित समाधान "मैं git रीसेट कैसे कर सकता हूं – हार्ड हेड ~ 1?"

पॅट नोट्स सही है। आप इतने लंबे समय तक प्रतिबद्ध हो सकते हैं क्योंकि यह कुछ दिनों के भीतर है। गिट केवल कचरा इकट्ठा होता है जब तक कि आप इसे स्पष्ट रूप से नए ब्लॉब्स को निकालने के लिए नहीं कहें।

 $ git init Initialized empty Git repository in .git/ $ echo "testing reset" > file1 $ git add file1 $ git commit -m 'added file1' Created initial commit 1a75c1d: added file1 1 files changed, 1 insertions(+), 0 deletions(-) create mode 100644 file1 $ echo "added new file" > file2 $ git add file2 $ git commit -m 'added file2' Created commit f6e5064: added file2 1 files changed, 1 insertions(+), 0 deletions(-) create mode 100644 file2 $ git reset --hard HEAD^ HEAD is now at 1a75c1d... added file1 $ cat file2 cat: file2: No such file or directory $ git reflog 1a75c1d... HEAD@{0}: reset --hard HEAD^: updating HEAD f6e5064... HEAD@{1}: commit: added file2 $ git reset --hard f6e5064 HEAD is now at f6e5064... added file2 $ cat file2 added new file 

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

आप जो करना चाहते हैं, वह उस प्रतिबद्धता के sha1 को निर्दिष्ट करना है जिसे आप पुनर्स्थापित करना चाहते हैं। आप रेफेल ( git reflog ) की जांच करके शाए 1 प्राप्त कर सकते हैं और फिर कर सकते हैं

git reset --hard <sha1 of desired commit>

लेकिन बहुत देर तक इंतजार न करें … कुछ हफ्तों के बाद जीआईटी अंततः देखेंगे कि बिना संदर्भों के रूप में प्रतिबद्ध है और सभी ब्लॉप्स को हटा दें।

उत्तर ऊपर की विस्तृत प्रतिक्रिया में छिपा हुआ है, आप बस कर सकते हैं:

 $> git reset --hard HEAD@{1} 

( जीआईटी रेफेल शो का आउटपुट देखें)

अगर गिट ने अभी तक कचरा एकत्र नहीं किया है तो इसे ठीक करना संभव है।

एफएसएसी के साथ झूलने का एक संक्षिप्त विवरण प्राप्त करें:

 $ git fsck --lost-found dangling commit b72e67a9bb3f1fc1b64528bcce031af4f0d6fcbf 

रिसाव के साथ झुकाव को पुनर्प्राप्त करें:

 $ git rebase b72e67a9bb3f1fc1b64528bcce031af4f0d6fcbf 

यदि आप वास्तव में भाग्यशाली हैं, जैसे मैं था, तो आप अपने पाठ संपादक में वापस जा सकते हैं और 'पूर्ववत करें' दबा सकते हैं।

मुझे पता है कि वास्तव में एक उचित जवाब नहीं है, लेकिन उसने मुझे आधे दिन का काम बचाया ताकि उम्मीद है कि वह किसी और के लिए भी ऐसा करेगी!

IRL मामले का उदाहरण:

$ git fsck --lost-found

 Checking object directories: 100% (256/256), done. Checking objects: 100% (3/3), done. dangling blob 025cab9725ccc00fbd7202da543f556c146cb119 dangling blob 84e9af799c2f5f08fb50874e5be7fb5cb7aa7c1b dangling blob 85f4d1a289e094012819d9732f017c7805ee85b4 dangling blob 8f654d1cd425da7389d12c17dd2d88d318496d98 dangling blob 9183b84bbd292dcc238ca546dab896e073432933 dangling blob 1448ee51d0ea16f259371b32a557b60f908d15ee dangling blob 95372cef6148d980ab1d7539ee6fbb44f5e87e22 dangling blob 9b3bf9fb1ee82c6d6d5ec9149e38fe53d4151fbd dangling blob 2b21002ca449a9e30dbb87e535fbd4e65bac18f7 dangling blob 2fff2f8e4ea6408ac84a8560477aa00583002e66 dangling blob 333e76340b59a944456b4befd0e007c2e23ab37b dangling blob b87163c8def315d40721e592f15c2192a33816bb dangling blob c22aafb90358f6bf22577d1ae077ad89d9eea0a7 dangling blob c6ef78dd64c886e9c9895e2fc4556e69e4fbb133 dangling blob 4a71f9ff8262701171d42559a283c751fea6a201 dangling blob 6b762d368f44ddd441e5b8eae6a7b611335b49a2 dangling blob 724d23914b48443b19eada79c3eb1813c3c67fed dangling blob 749ffc9a412e7584245af5106e78167b9480a27b dangling commit f6ce1a403399772d4146d306d5763f3f5715cb5a <- it's this one 

$ git show f6ce1a403399772d4146d306d5763f3f5715cb5a

 commit f6ce1a403399772d4146d306d5763f3f5715cb5a Author: Stian Gudmundsen Høiland <stian@Stians-Mac-mini.local> Date: Wed Aug 15 08:41:30 2012 +0200 *MY COMMIT MESSAGE IS DISPLAYED HERE* diff --git a/Some.file b/Some.file new file mode 100644 index 0000000..15baeba --- /dev/null +++ b/Some.file *THE WHOLE COMMIT IS DISPLAYED HERE* 

$ git rebase f6ce1a403399772d4146d306d5763f3f5715cb5a

 First, rewinding head to replay your work on top of it... Fast-forwarded master to f6ce1a403399772d4146d306d5763f3f5715cb5a. 

यदि आपने अभी तक कचरा एकत्रित नहीं किया है (जैसे git repack -d या git gc , लेकिन ध्यान दें कि कचरा संग्रह भी स्वचालित रूप से हो सकता है), तो आपका कमबख्त अभी भी है – यह केवल सिर के माध्यम से नहीं पहुंच सकता है

आप git fsck --lost-found के आउटपुट को देखकर अपनी प्रतिबद्धता प्राप्त करने का प्रयास कर सकते git fsck --lost-found

गीट के नए संस्करणों को "रेफलॉग" कहा जाता है, जो कि सभी परिवर्तनों का एक लॉग होता है जो कि रिफ्स के लिए किया जाता है (जो कि रिपॉजिटरी सामग्री के लिए किए गए परिवर्तनों के विपरीत) इसलिए, उदाहरण के लिए, हर बार जब आप अपने प्रमुख को स्विच करते हैं (अर्थात हर बार जब आप शाखाएं स्विच करने के लिए एक git checkout करते हैं) जो लॉग इन हो जाएंगे और, ज़ाहिर है, आपका git reset ने हेड में हेरफेर किया, इसलिए यह भी लॉग किया गया था। आप अपने रेफ़ोन्स के पुराने राज्यों को इसी प्रकार से एक्सेस कर सकते हैं कि आप git reset HEAD@{1} जैसे किसी ~ बजाय @ चिह्न का उपयोग करके अपने रिपॉजिटरी के पुराने राज्यों तक पहुंच सकते हैं।

यह समझने में मुझे थोड़ी देर लग गई कि अंतर {@} और HEAD ~ 1 के बीच अंतर क्या है, तो यहां एक छोटी सी व्याख्या है:

 git init git commit --allow-empty -mOne git commit --allow-empty -mTwo git checkout -b anotherbranch git commit --allow-empty -mThree git checkout master # This changes the HEAD, but not the repository contents git show HEAD~1 # => One git show HEAD@{1} # => Three git reflog 

इसलिए, HEAD~1 अर्थ है कि "वर्तमान में बताए गए प्रतिबद्धता से पहले प्रतिबद्धता पर जाएं", जबकि HEAD@{1} अर्थ है "उस प्रतिबद्धता पर जाना जो उस बिंदु पर इंगित करता है जहां वह वर्तमान में इंगित करता है"।

यह आसानी से आपको अपनी खोई हुई चीजों को ढूंढने और इसे पुनर्प्राप्त करने की अनुमति देगा।

जहाँ तक मुझे पता है, – --hard बिना अव्यक्त परिवर्तन को त्याग देगा। चूंकि इन्हें जीआईटी द्वारा ट्रैक नहीं किया गया है। लेकिन आप discarded commit को पूर्ववत कर सकते discarded commit

 $ git reflog 

सूची देगा:

 b0d059c HEAD@{0}: reset: moving to HEAD~1 4bac331 HEAD@{1}: commit: added level introduction.... .... 

जहां 4bac331 discarded commit

अब केवल उस प्रतिबद्ध को सिर ले जाएं ::

 $ git reset --hard 4bac331 

ज्यादातर मामलों में, हाँ

आपके रिपॉजिटरी की स्थिति के आधार पर जब आप कमांड चलाते थे, git reset --hard के प्रभाव – git reset --hard तुच्छ से पूर्ववत करने के लिए, मूल रूप से असंभव हो सकता है

नीचे मैंने कई अलग-अलग संभावित परिदृश्यों को सूचीबद्ध किया है, और आप उनसे कैसे ठीक हो सकते हैं।

मेरे सभी बदलाव किए गए थे, लेकिन अब कमाई खत्म हो गई है!

यह स्थिति आमतौर पर तब होती है जब आप git reset साथ-साथ git reset --hard HEAD~ चिंता मत करो, इससे ठीक करना आसान है!

अगर आप बस git reset चलते हैं और कुछ भी नहीं किया है, तो आप इस एक-लाइनर के साथ जहां वापस आ सकते हैं:

 git reset --hard @{1} 

यह आपके वर्तमान शाखा को पिछली बार इसे संशोधित करने से पहले जो भी स्थिति में थी, उसे रीसेट करता है (आपके मामले में, शाखा में सबसे हाल ही में संशोधन करना कठिन रीसेट होगा जिसे आप वापस करने का प्रयास कर रहे हैं)।

अगर, हालांकि, आपने रीसेट के बाद से अपनी शाखा में अन्य संशोधन किए हैं, तो ऊपर एक-लाइनर काम नहीं करेगा। इसके बजाय, आपको अपनी शाखा (रीसेट सहित) में किए गए सभी हालिया परिवर्तनों की सूची देखने के लिए git reflog <branchname> चलाना चाहिए। यह सूची कुछ ऐसा दिखाई देगा:

 7c169bd master@{0}: reset: moving to HEAD~ 3ae5027 master@{1}: commit: Changed file2 7c169bd master@{2}: commit: Some change 5eb37ca master@{3}: commit (initial): Initial commit 

इस सूची में ऑपरेशन ढूंढें, जिसे आप "पूर्ववत करें" करना चाहते हैं। उपरोक्त उदाहरण में, यह पहली पंक्ति होगी, जो "रीसेट करता है: HEAD पर जा रहा है ~"। उसके बाद आपरेशन से पहले (नीचे) कमिट के प्रतिनिधित्व की प्रतिलिपि बनाएँ। हमारे मामले में, यह master@{1} (या 3ae5027 , वे दोनों एक ही प्रतिबद्धता का प्रतिनिधित्व करेंगे) master@{1} होंगे, और git reset --hard <commit> को अपनी वर्तमान शाखा को वापस 3ae5027 लिए प्रतिबद्ध करें।

मैंने git add साथ अपने बदलाव किए, लेकिन कभी प्रतिबद्ध नहीं। अब मेरे बदलाव चले गए हैं!

इससे ठीक होने के लिए यह थोड़ा पेचीदा है git में आपके द्वारा जोड़ी गई फ़ाइलों की प्रतियां हैं, लेकिन चूंकि इन प्रतियों को किसी विशेष रूप से प्रतिबद्ध नहीं किया गया था, आप एक बार में सभी परिवर्तनों को पुनर्स्थापित नहीं कर सकते। इसके बजाय, आपको गिट के डाटाबेस में व्यक्तिगत फाइलों को ढूंढना होगा और मैन्युअल रूप से उन्हें पुनर्स्थापित करना होगा। आप इसे git fsck का उपयोग कर सकते हैं

इस पर अधिक जानकारी के लिए, स्टेजींग क्षेत्र में अनकही फाइलों के साथ पूर्ववत गिट रीसेट करें देखें।

मैंने अपनी कामकाजी डायरेक्टरी में फाइलों में बदलाव किया था जो मैंने कभी भी git add साथ नहीं किया था, और कभी प्रतिबद्ध नहीं था। अब मेरे बदलाव चले गए हैं!

उह ओह। मैं आपको यह बताने से नफरत करता हूं, लेकिन आप भाग्य से बाहर हैं git उन परिवर्तनों को संग्रहीत नहीं करता है जो आप इसे जोड़ नहीं या प्रतिबद्ध नहीं करते हैं, और git reset लिए दस्तावेज़ के अनुसार:

–कठिन

सूचकांक और काम के पेड़ को रीसेट करता है काम करने वाले पेड़ों में ट्रैक किए गए फ़ाइलों में से कोई भी बदलाव क्योंकि <commit> को त्याग दिया जाता है।

यह संभव है कि आप कुछ प्रकार की डिस्क वसूली उपयोगिता या पेशेवर डेटा वसूली सेवा के साथ अपने परिवर्तनों को पुनर्प्राप्त करने में सक्षम हो सकें, लेकिन इस समय यह संभवतः इसके मुकाबले अधिक परेशानी है।

मुझे पता है यह एक पुरानी धागा है … लेकिन जितने लोग गिट में सामान को पूर्ववत करने के तरीकों के लिए खोज रहे हैं, मुझे अभी भी लगता है कि यहां सुझाव देने के लिए यह एक अच्छा विचार हो सकता है।

जब आप "जीआईटी ऐड" करते हैं या गिट गुइ में ऊपर से बाएं से नीचे तक कुछ भी लेते हैं तो फाइल की सामग्री को ब्लॉब में संग्रहीत किया जाता है और उस ब्लॉब से फाइल सामग्री को पुनर्प्राप्त करना संभव है।

इसलिए किसी फ़ाइल को पुनर्प्राप्त करना संभव है, भले ही वह प्रतिबद्ध न हो, लेकिन इसे जोड़ा जाना है।

 git init echo hello >> test.txt git add test.txt 

अब ब्लॉब बनाया गया है लेकिन इसे इंडेक्स द्वारा संदर्भित किया गया है, इसलिए जब तक हम रीसेट नहीं करेंगे तब तक इसे git fsck के साथ सूचीबद्ध नहीं किया जाएगा। इसलिए हम रीसेट करते हैं …

 git reset --hard git fsck 

आप एक झूलने बूँद CE013625030ba8dba906f756967f9e9ca394464a मिलेगा

 git show ce01362 

आपको फ़ाइल सामग्री "हैलो" वापस देगी

बिना संदर्भित किए गए कमानों को खोजने के लिए मुझे यह सुझाव मिल रहा है कि कहीं कोई सुझाव है।

 gitk --all $(git log -g --pretty=format:%h) 

मुझे इसे जीआईटी गिनी में एक उपकरण के रूप में मिला है और यह बहुत आसान है।

एक छोटे से स्क्रिप्ट बनाई जिसे इसे ढूंढने के लिए थोड़ा आसान लगता है:

git fsck --lost-found | grep commit | cut -d ' ' -f 3 | xargs -i git show \{\} | egrep '^commit |Date:'

हां, यह बहुत ही सुंदर या अजीब तरह से किया जा सकता है, लेकिन यह सरल है और मुझे इसकी जरुरत है। किसी और को 30 सेकंड बचा सकते हैं

मैंने अभी गलत परियोजना पर एक कठिन रीसेट किया है क्या मेरा जीवन बचाया गया एक्लिप्स का स्थानीय इतिहास IntelliJ आइडिया एक है, भी कहा जाता है, और ऐसा कर सकते हैं अपने संपादक, यह जाँच के लायक है:

  1. स्थानीय इतिहास पर ईक्लीपस सहायता विषय
  2. http://wiki.eclipse.org/FAQ_Where_is_the_workspace_local_history_stored%3F