बिटकॉइन में आखिरी कमिट डिलीट करें


103

मैंने एक गलती की और मुझे नहीं पता कि रिपॉजिटरी में मेरे नवीनतम पुश को कैसे हटाया जाए। मैं ऐप के नवीनतम अपडेट खींचता हूं लेकिन इसमें विरोध है और मैं इसे रिपॉजिटरी में धकेलता हूं।

मेरी अंतिम प्रतिबद्ध को कैसे हटाएं? या इसे कैसे ठीक करें?

जवाबों:


102

पहली जगह में, यदि आप एक ही कोड रिपॉजिटरी में अन्य लोगों के साथ काम कर रहे हैं, तो आपको एक कमिट को डिलीट नहीं करना चाहिए क्योंकि जब आप रिपॉजिटरी पर अपडेट को बल देते हैं तो यह आपके सहकर्मियों के स्थानीय रिपॉजिटरी को एक अवैध स्थिति में छोड़ देगा (जैसे कि वे) आपके द्वारा हटाए जाने के बाद किए गए कमिट, वे कमिट अमान्य हो जाएंगे क्योंकि वे अब गैर-मौजूद कमिट पर आधारित थे)।

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

पर Git :

git revert <commit>

पर तेज :

hg backout <REV>

EDIT: रिवर्ट ऑपरेशन एक नई कमिट बनाता है जो रिवर्ट किए गए कमिट के विपरीत होता है (जैसे अगर ओरिजिनल कमिट एक लाइन जोड़ देता है, रिवर्ट कमिट उस लाइन को डिलीट कर देता है), रिप्रेजेंटरी हिस्ट्री को दोबारा लिखे बिना अनसोल्ड कमिट के बदलावों को प्रभावी ढंग से हटा देता है।


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

git backout <REV>? या hg backout <REV>:?
आर्मेंडो पेरेज़ मार्केज़

लेकिन क्या होगा अगर एक के बाद किए गए कमिट को हटाए जाने वाले लाइन पर संशोधन किए गए हैं?
रस

@RahulSaha जब से आप कर रहे हैं मूल रूप से शाखा में एक कमेटी को मर्ज करने की कोशिश कर रहा है, मुझे पूरा यकीन है कि यह आपको एक मर्ज संघर्ष देगा जिसे आप हल करने जा रहे हैं।
12

98

यदि आप दूसरों के साथ काम नहीं कर रहे हैं (या उन्हें महत्वपूर्ण झुंझलाहट पैदा करने के लिए खुश हैं) , तो बिटकॉइन शाखाओं से कमिट्स को निकालना संभव है।

यदि आप एक गैर-मास्टर शाखा बदलने की कोशिश कर रहे हैं:

git reset HEAD^               # remove the last commit from the branch history
git push origin :branch_name  # delete the branch from bitbucket
git push origin branch_name   # push the branch back up again, without the last commit

यदि आप मास्टर शाखा को बदलने की कोशिश कर रहे हैं

आमतौर पर, मास्टर शाखा विशेष नहीं है - यह सिर्फ एक सम्मेलन है। हालांकि, बिटबकेट और गीथूब और समान साइटों को आमतौर पर एक मुख्य शाखा होने की आवश्यकता होती है (संभवतः क्योंकि यह घटना को संभालने के लिए अधिक कोड लिखने से आसान है कि एक रिपॉजिटरी की कोई शाखा नहीं है - निश्चित नहीं है)। इसलिए आपको एक नई शाखा बनाने की आवश्यकता है, और यह सुनिश्चित करें कि मुख्य शाखा:

# on master:
git checkout -b master_temp  
git reset HEAD^              # undo the bad commit on master_temp
git push origin master_temp  # push the new master to Bitbucket

Bitbucket पर, रिपॉजिटरी सेटिंग्स में जाएं, और "मेन ब्रांच" को master_temp( गितुब पर, "डिफॉल्ट ब्रांच" बदलें)।

git push origin :master     # delete the original master branch from Bitbucket
git checkout master
git reset master_temp       # reset master to master_temp (removing the bad commit)
git push origin master      # re-upload master to bitbucket

अब Bitbucket पर जाएं, और आपको वह इतिहास देखना चाहिए जो आप चाहते हैं। अब आप सेटिंग पृष्ठ पर जा सकते हैं और मुख्य शाखा को वापस बदल सकते हैं master

यह प्रक्रिया किसी अन्य इतिहास परिवर्तन (जैसे git filter-branch) के साथ भी काम करेगी । नए इतिहास को पुराने से अलग करने से पहले आपको बस उपयुक्त कमिट को रीसेट करना सुनिश्चित करना होगा।

संपादित करें : जाहिरा तौर पर आपको यह सब झंझट पर जाने की आवश्यकता नहीं है, क्योंकि आप एक रीसेट शाखा को बल दे सकते हैं ।

नाराज सहयोगियों से निपटना

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

git reset HEAD^
git pull

यदि उन्होंने खराब प्रतिबद्ध को खींच लिया है, और इसके ऊपर प्रतिबद्ध हैं , तो उन्हें रीसेट करना होगा, और फिर git cherry-pickअच्छा काम करता है कि वे खराब प्रतिबद्ध के बिना पूरी शाखा को फिर से बनाना चाहते हैं।

यदि उन्होंने कभी खराब कमिट नहीं की, तो यह पूरी प्रक्रिया उन्हें प्रभावित नहीं करेगी, और वे सामान्य रूप से खींच सकते हैं।


1
SourceTree: 1) का उपयोग करने वालों के लिए अधिक आरामदायक के लिए, BitBucket के लिए वेब UI में मुख्य शाखा को बदलने के लिए, रेपो सेटिंग्स को देखें। 2) वेब यूआई में एक शाखा को हटाने के लिए, शाखाएं पृष्ठ पर देखें। 3) उपरोक्तानुसार स्थानीय रेपो को रीसेट करें। 4) उन शाखाओं को फिर से बनाने के लिए अपने स्थानीय परिवर्तनों को पुश करें।
रिचर्ड ले मेसियर

2
जैसा कि किसी ने गलती से एक गुप्त धक्का दिया, मैंने इस जवाब की पूरी तरह से सराहना की। धन्यवाद!
टोक़

48

आप HEAD^इसे पुश करने के लिए मजबूर कर सकते हैं ।

git reset HEAD^
git push -u origin master --force

यह आपकी पिछली कमिट को हटा देगा और बिटकॉइन पर कमिटेड डिलीट के रूप में प्रतिबिंबित करेगा लेकिन फिर भी उनके सर्वर पर रहेगा।


गितुब यह अनुमति देगा, लेकिन इस लेखन के रूप में, बिटबकेट बल को धक्का देने की अनुमति नहीं देता है।
जेम्सक्यू मर्फी

4
वास्तव में बिटबकैट बल का समर्थन करता है, बस पूरी तरह से हटाए गए कमिट्स को हटाने के बजाय यह अंतर पूरी तरह से हटा देता है क्योंकि यह उन्हें हटाए गए के रूप में चिह्नित करता है।
शुबांकर

Bitbucket से अनुशंसित तरीका रिवर्ट का उपयोग कर रहा है। लेकिन मुझे लगता है कि मेरे मामले में यह अधिक उपयुक्त है। चूंकि मैं इसका उपयोग करने वाला एकमात्र व्यक्ति हूं, और यह पुन: उपयोग करने की तुलना में अधिक स्वच्छ महसूस करता है। धन्यवाद।
नफसका

1
हाँ, यह अभी भी Bitbucket पर काम करता है। आपने मुझे बड़ा समय दिया है! मैंने अपने ग्रहण से एक कमिट / पुश किया और मेरे पास मौजूद अन्य प्रोजेक्ट के लिए मिला। कमांड लाइन का उपयोग करके मेरे हिस्से से खराब अभ्यास के कारण भाग में और गिट पर काम करने के लिए निर्मित ग्रहण।
डार्ककाइग्नस

शानदार, या आसान: इस प्रतिबद्ध करने के लिए वर्तमान शाखा को रीसेट करें, फिर उस बल का उपयोग करके सर्वर को मेरी समस्या ठीक करें
एंथनी काल

3

मुझे भूतकाल में उलटाव से परेशानी हुई है (मुख्यतः क्योंकि मैं निश्चित नहीं हूं कि यह कैसे काम करता है।) मुझे मर्ज की समस्या के कारण वापस आने में परेशानी हुई है ..

मेरा सरल उपाय यह है।

चरण 1।

 git clone <your repos URL> .

आपका प्रोजेक्ट किसी अन्य फ़ोल्डर में, तब:

चरण 2।

git reset --hard <the commit you wanna go to>

फिर चरण 3।

अपने नवीनतम (और मुख्य) प्रोजेक्ट डीआईआर (जिस पर अंतिम समस्या है) चरण 2 की फाइलों को पेस्ट करें

चरण 4।

git commit -m "Fixing the previous messy commit" 

चरण 5।

का आनंद लें


1
काटना और चिपकाना वास्तव में गड़बड़ है। इसके अलावा, यह सवाल से समस्या का समाधान नहीं होगा।
डैनियल ली

1
git revertसरल है: यह एक नई कमिट बनाता है जो पिछली कमिट (या मल्टीपल कमिट) में हुए बदलावों को उल्टा करता है। यह आवागमन को नष्ट नहीं करता है, इसलिए यह इस प्रश्न के लिए प्रासंगिक नहीं है। इसके अलावा, यहाँ क्लोनिंग स्टेप वास्तव में आवश्यक नहीं है।
naught101

1
Git revert उपरोक्त के समान समान तंत्र है।
नफ्सका

3

यहाँ 4 चरणों में एक सरल तरीका दिया गया है:

0 - उस टीम को सलाह दें जिसे आप रिपॉजिटरी को ठीक करने जा रहे हैं

टीम के साथ जुड़ें और उन्हें आगामी परिवर्तनों के बारे में बताएं।

1 - आखिरी कमिटमेंट निकालें

अपना लक्ष्य शाखा मान रहा है master:

$ git checkout master              # move to the target branch
$ git reset --hard HEAD^           # remove the last commit
$ git push -f                      # push to fix the remote

यदि आप अकेले काम कर रहे हैं तो इस बिंदु पर आप कर रहे हैं।

2 - अपने टीममेट के स्थानीय रिपॉजिटरी को ठीक करें

अपनी टीम के साथी पर:

$ git checkout master              # move to the target branch
$ git fetch                        # update the local references but do not merge  
$ git reset --hard origin/master   # match the newly fetched remote state

यदि आपकी टीम के साथी के पास कोई नया काम नहीं था, तो आपको इस बिंदु पर किया जाता है और आपको सिंक में होना चाहिए।

3 - खोए हुए कमों को वापस लाना

मान लीजिए कि एक टीममेट की एक नई और अप्रकाशित प्रतिबद्धता थी जो इस प्रक्रिया में खो गई थी।

$ git reflog                       # find the new commit hash
$ git cherry-pick <commit_hash>

इसके लिए उतना ही करें जितना आवश्यक हो।

मैंने कई बार इस दृष्टिकोण का सफलतापूर्वक उपयोग किया है। यह सुनिश्चित करने के लिए टीम प्रयास की आवश्यकता है कि सब कुछ सिंक्रनाइज़ है।


2

जैसा कि दूसरों ने कहा है, आमतौर पर आप उपयोग करना चाहते हैं hg backoutया git revert। हालांकि, कभी-कभी आप वास्तव में एक कमिट से छुटकारा पाना चाहते हैं।

सबसे पहले, आप अपनी रिपॉजिटरी की सेटिंग में जाना चाहेंगे। Strip commitsलिंक पर क्लिक करें ।

स्ट्रिप बिटबकेट सेटिंग्स में लिंक को जोड़ता है

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


कौन सा संस्करण है, और किन अनुमतियों की आवश्यकता है? यह v6.4.3 पर अलग दिख रहा है जो मैं देख रहा हूं, और यह आइटम वहां नहीं है। मैं कर रहा हूँ भंडार व्यवस्थापक।
राफेल

1

एक बार परिवर्तन हो जाने के बाद इसे हटाया नहीं जा सकेगा। क्योंकि प्रतिबद्ध की मूल प्रकृति हटाना नहीं है।

बात आप कर सकते हैं (आसान और सुरक्षित विधि),

इंटरएक्टिव छूट:

1) git rebase -i HEAD~2 # अपना हाल 2 दिखाओ

2) आपकी प्रतिबद्ध सूची की तरह, हाल ही में LILO पृष्ठ के नीचे दिखाई देगा (अंतिम में अंतिम)

यहां छवि विवरण दर्ज करें

अंतिम प्रतिबद्ध पंक्ति को पूरी तरह से हटा दें

3) द्वारा इसे बचाने के लिए ctrl+XयाESC:wq

अब आपकी शाखा आपकी अंतिम प्रतिबद्ध के बिना अपडेट की जाएगी।


1

आप डस्टिन द्वारा बताई गई बिटकॉइन के लिए भी कमांड लिख सकते हैं :

git push -f origin HEAD^:master

नोट: मास्टर के बजाय आप किसी भी शाखा का उपयोग कर सकते हैं। और यह Bitbucket पर सिर्फ पुश को हटाता है।

जीआईटी के उपयोग में स्थानीय रूप से अंतिम प्रतिबद्ध हटाने के लिए:

git reset --hard HEAD~1

0

अब तक, क्लाउड बिटबकेट (मुझे यकीन नहीं है कि कौन सा संस्करण है) फ़ाइल सिस्टम से एक कमिट को वापस करने की अनुमति देता है इस प्रकार (मैं क्रोम ब्राउज़र में बिटबकेट इंटरफ़ेस से वापस कैसे आना है) नहीं देखता।

अनजाने में किए गए परिवर्तनों को सुरक्षित करने के लिए अपनी पूरी निर्देशिका को वापस करें

-सेलेक्ट डायरेक्टरी को चेक करें

सटीक माउस बटन: कछुआ गिट मेनू

-रेपो-ब्राउज़र (मेनू विकल्प 'रिवर्ट' केवल अनचाहे परिवर्तनों को हटा देता है)

हेड बटन दबाएं

ऊपरवाला लाइन (अंतिम प्रतिबद्ध) का चयन करें

-राइट माउस बटन: इस कमिट द्वारा परिवर्तन को वापस लाएं

-इसके बाद यह फाइल सिस्टम, प्रेस कमिट पर बदलाव को अनडिप्ट करता है

-यह एक संदेश is रिवर्ट (आपका पिछला संदेश) के साथ जीआईटी को अद्यतन करता है। यह श्रद्धालु ऐसा करते हैं '

-अच्छी तरह से 'कमिट एंड पुश' करें।

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