2009-10-23 16 views
313

को धक्का नहीं दिया है मैंने एक 'गिट प्रतिबद्ध' किया है लेकिन मैंने दूसरों को धक्का नहीं दिया है। इसलिए जब मैं 'गिट स्टेटस' करता हूं, तो मुझे मिलती है '# आपकी शाखा 1 मास्टर द्वारा' मास्टर 'से आगे है।'एक गिट प्रतिबद्ध निकालें जो

तो मैं

git reset --hard eb27bf26dd18c5a34e0e82b929e0d74cfcaab316 

दिया अपने शीर्ष प्रतिबद्ध रोल बैक करना चाहते हैं, मैं तो बस कर सकते हैं "यदि यह है कि जब मैं 'Git लॉग' कर

 
commit eb27bf26dd18c5a34e0e82b929e0d74cfcaab316 
Date: Tue Sep 29 11:21:41 2009 -0700 


commit db0c078d5286b837532ff5e276dcf91885df2296 
Date: Tue Sep 22 10:31:37 2009 -0700
+6

यह सवाल अपने प्रश्न के दूसरे का डुप्लिकेट हो गया लगता है: http://stackoverflow.com/questions/1338728/how -to-delete-a-git-commit –

+0

संभावित गलती [गिट में एक शाखा से हटाएं हटाएं] (https://stackoverflow.com/questions/1338728/delete-commits-from-a-branch-in-git) –

+0

संभावित डुप्लिकेट [पिछली प्रतिबद्धता के लिए गिट रिपॉजिटरी को कैसे वापस लाया जाए?] (Https://stackoverflow.com/questions/4114095/how-to-revert-git-repository-to-a-previous-commit) –

उत्तर

306

वास्तव में, जब आप git reset उपयोग करते हैं, आपको उस प्रतिबद्धता का संदर्भ लेना चाहिए जिसे आप से पर रीसेट कर रहे हैं, इसलिए आप db0c078 प्रतिबद्ध करना चाहते हैं, शायद

मौजूदा सिर से पहले पिछले प्रतिबद्धता को रीसेट करने के लिए, एक आसान संस्करण git reset --hard HEAD^ होगा; इस तरह आपको प्रतिबद्ध आईडी के आसपास प्रतिलिपि बनाने की आवश्यकता नहीं है।

जब आप कोई git reset --hard करते हैं, तो सावधान रहें, क्योंकि आप किसी भी असामान्य परिवर्तन को खो सकते हैं। यह सुनिश्चित करने के लिए कि आपकी कार्य प्रतिलिपि साफ है, या आप वहां मौजूद किसी भी बदलाव को उड़ाना चाहते हैं, तो आप git status जांचना चाहेंगे।

इसके अलावा, प्रमुख के बजाय आप origin/master संदर्भ के रूप में, के रूप में @bdonlan ने सुझाव दिया टिप्पणी में उपयोग कर सकते हैं: git reset --hard origin/master

+223

या 'गीट रीसेट - मूल उत्पत्ति/मास्टर', जो कुछ भी मूल था उसे रीसेट करने के लिए। – bdonlan

+0

हां, यह भी एक उपयोगी है। –

+1

एक और उपयोगी सूचक जो आप रीसेट कर सकते हैं ओआरजीजी \ _HEAD या इसके सामान्यीकरण को रीफ्लॉग HEAD @ {1} (HEAD की अंतिम स्थिति) का उपयोग कर रहा है। –

267

यदि आप के लिए दूरदराज के

git reset HEAD~1 

चेक आपके परिवर्तन नहीं धकेल दिया अगर कामकाजी प्रति git status द्वारा साफ है।

वरना आप दूरस्थ

git revert HEAD 

में अपने परिवर्तन धकेल दिया यह आदेश लौट जाएगा/निकालें पिछले एक प्रतिबद्ध/परिवर्तन और फिर आप

+11

यह "नवीनतम गिट प्रतिबद्ध को हटाएं जिसे हटाया नहीं गया है" (0 निकटतम उत्तर IMHO) –

+9

इसके अलावा, यह अंतिम प्रतिबद्धता में किए गए स्थानीय परिवर्तनों को भी रखता है, जबकि गिट रीसेट - हार्ड –

103
git reset --hard origin/master 

पुश करने के लिए इसे रीसेट कर सकते हैं जो कुछ भी उत्पत्ति पर था।

यह comments में @bdonlan द्वारा पोस्ट किया गया था। मैंने उन लोगों के लिए यह उत्तर जोड़ा जो टिप्पणियां नहीं पढ़ते हैं।

+2

नहीं है इस सवाल से लगभग 5 साल पहले, और यह पहले से ही एक टिप्पणी में है। –

+1

क्या होगा अगर वर्तमान स्थानीय शाखा 'मास्टर' से अलग हो - क्या मुझे तब 'मूल/mybranch' का उपयोग करना चाहिए? –

+0

साझा करने के लिए धन्यवाद! यह एकमात्र ऐसा है जो मेरे लिए काम करता है। – Hajjat

11

मैंने उसी स्थिति का अनुभव किया है जैसा मैंने नीचे किया था उतना आसान है। commit-Id गुजर कर आप विशेष के लिए तक पहुँच सकते हैं प्रतिबद्ध आप जाना चाहते हैं:

git reset --hard {commit-id} 

आप अपने पिछले दूर करने के लिए इतना प्रतिबद्ध आप commit-Id जहाँ आप अपने सूचक बढ़ने की जरूरत है पारित करने के लिए की जरूरत है चाहता हूँ के रूप में:

git reset --hard db0c078d5286b837532ff5e276dcf91885df2296 
+0

बस मेरे जैसे नए लोगों के लिए एक चेतावनी - आप किसी भी फाइल का बैक अप लेते हैं परिवर्तनों को रखना चाहते हैं, क्योंकि उन्हें पहले के संस्करण में वापस कर दिया जाएगा। मेरा परिदृश्य यह था कि मैंने गलती से मेरी रेपो निर्देशिका में डेटाबेस डंप डाला और फिर प्रतिबद्ध किया - मैं स्पष्ट रूप से उन फ़ाइलों को रेपो में नहीं करना चाहता था, लेकिन डीआईडी ​​अन्य फाइलों में किए गए परिवर्तनों को रखना चाहता हूं। तो मुझे गिट रीसेट करने से पहले किए गए बैकअप से आवश्यक परिवर्तनों को कॉपी और पेस्ट करना पड़ा। – user1063287

0

एक तरीका स्थानीय शाखा को हटाना होगा और सर्वर से शाखा चेकआउट करना होगा यदि आपकी स्थानीय शाखा कई कामों से रिमोट से आगे है और आपको उन सभी को असामान्य करने की आवश्यकता है।

पहले चेकआउट अपनी शाखा (मेरे मामले master शाखा के लिए):

0

यह मैं क्या कर रहा है

git checkout master 

फिर दूरदराज के प्रमुख^(यह आपके सभी स्थानीय परिवर्तन हटा देंगे पर रीसेट), स्वच्छ बल और पुल:

git reset HEAD^ --hard && git clean -df && git pull 
संबंधित मुद्दे