जवाबों:
पहली जगह में, यदि आप एक ही कोड रिपॉजिटरी में अन्य लोगों के साथ काम कर रहे हैं, तो आपको एक कमिट को डिलीट नहीं करना चाहिए क्योंकि जब आप रिपॉजिटरी पर अपडेट को बल देते हैं तो यह आपके सहकर्मियों के स्थानीय रिपॉजिटरी को एक अवैध स्थिति में छोड़ देगा (जैसे कि वे) आपके द्वारा हटाए जाने के बाद किए गए कमिट, वे कमिट अमान्य हो जाएंगे क्योंकि वे अब गैर-मौजूद कमिट पर आधारित थे)।
कहा आप क्या कर सकते है कि, वापस लाएं प्रतिबद्ध। यह प्रक्रिया आपके द्वारा उपयोग किए जा रहे सीवीएस के आधार पर अलग-अलग (अलग-अलग कमांड) की जाती है:
पर Git :
git revert <commit>
पर तेज :
hg backout <REV>
EDIT: रिवर्ट ऑपरेशन एक नई कमिट बनाता है जो रिवर्ट किए गए कमिट के विपरीत होता है (जैसे अगर ओरिजिनल कमिट एक लाइन जोड़ देता है, रिवर्ट कमिट उस लाइन को डिलीट कर देता है), रिप्रेजेंटरी हिस्ट्री को दोबारा लिखे बिना अनसोल्ड कमिट के बदलावों को प्रभावी ढंग से हटा देता है।
git backout <REV>
? या hg backout <REV>
:?
यदि आप दूसरों के साथ काम नहीं कर रहे हैं (या उन्हें महत्वपूर्ण झुंझलाहट पैदा करने के लिए खुश हैं) , तो बिटकॉइन शाखाओं से कमिट्स को निकालना संभव है।
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
अच्छा काम करता है कि वे खराब प्रतिबद्ध के बिना पूरी शाखा को फिर से बनाना चाहते हैं।
यदि उन्होंने कभी खराब कमिट नहीं की, तो यह पूरी प्रक्रिया उन्हें प्रभावित नहीं करेगी, और वे सामान्य रूप से खींच सकते हैं।
आप HEAD^
इसे पुश करने के लिए मजबूर कर सकते हैं ।
git reset HEAD^
git push -u origin master --force
यह आपकी पिछली कमिट को हटा देगा और बिटकॉइन पर कमिटेड डिलीट के रूप में प्रतिबिंबित करेगा लेकिन फिर भी उनके सर्वर पर रहेगा।
मुझे भूतकाल में उलटाव से परेशानी हुई है (मुख्यतः क्योंकि मैं निश्चित नहीं हूं कि यह कैसे काम करता है।) मुझे मर्ज की समस्या के कारण वापस आने में परेशानी हुई है ..
मेरा सरल उपाय यह है।
चरण 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।
का आनंद लें
git revert
सरल है: यह एक नई कमिट बनाता है जो पिछली कमिट (या मल्टीपल कमिट) में हुए बदलावों को उल्टा करता है। यह आवागमन को नष्ट नहीं करता है, इसलिए यह इस प्रश्न के लिए प्रासंगिक नहीं है। इसके अलावा, यहाँ क्लोनिंग स्टेप वास्तव में आवश्यक नहीं है।
यहाँ 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>
इसके लिए उतना ही करें जितना आवश्यक हो।
मैंने कई बार इस दृष्टिकोण का सफलतापूर्वक उपयोग किया है। यह सुनिश्चित करने के लिए टीम प्रयास की आवश्यकता है कि सब कुछ सिंक्रनाइज़ है।
जैसा कि दूसरों ने कहा है, आमतौर पर आप उपयोग करना चाहते हैं hg backout
या git revert
। हालांकि, कभी-कभी आप वास्तव में एक कमिट से छुटकारा पाना चाहते हैं।
सबसे पहले, आप अपनी रिपॉजिटरी की सेटिंग में जाना चाहेंगे। Strip commits
लिंक पर क्लिक करें ।
जिस परिवर्तन को आप नष्ट करना चाहते हैं, उसके लिए परिवर्तन आईडी दर्ज करें और क्लिक करें Preview strip
। इससे आपको पता चल जाएगा कि आप इसे करने से पहले किस तरह का नुकसान करने वाले हैं। फिर बस क्लिक करें Confirm
और आपकी प्रतिबद्धता अब इतिहास नहीं है। सुनिश्चित करें कि आपने अपने सभी सहयोगियों को यह बता दिया है कि आपने क्या किया है, इसलिए वे गलती से आपत्तिजनक कमेंट को वापस नहीं लेते हैं।
एक बार परिवर्तन हो जाने के बाद इसे हटाया नहीं जा सकेगा। क्योंकि प्रतिबद्ध की मूल प्रकृति हटाना नहीं है।
बात आप कर सकते हैं (आसान और सुरक्षित विधि),
इंटरएक्टिव छूट:
1) git rebase -i HEAD~2
# अपना हाल 2 दिखाओ
2) आपकी प्रतिबद्ध सूची की तरह, हाल ही में LILO पृष्ठ के नीचे दिखाई देगा (अंतिम में अंतिम)
अंतिम प्रतिबद्ध पंक्ति को पूरी तरह से हटा दें
3) द्वारा इसे बचाने के लिए ctrl+X
याESC:wq
अब आपकी शाखा आपकी अंतिम प्रतिबद्ध के बिना अपडेट की जाएगी।
आप डस्टिन द्वारा बताई गई बिटकॉइन के लिए भी कमांड लिख सकते हैं :
git push -f origin HEAD^:master
नोट: मास्टर के बजाय आप किसी भी शाखा का उपयोग कर सकते हैं। और यह Bitbucket पर सिर्फ पुश को हटाता है।
जीआईटी के उपयोग में स्थानीय रूप से अंतिम प्रतिबद्ध हटाने के लिए:
git reset --hard HEAD~1
अब तक, क्लाउड बिटबकेट (मुझे यकीन नहीं है कि कौन सा संस्करण है) फ़ाइल सिस्टम से एक कमिट को वापस करने की अनुमति देता है इस प्रकार (मैं क्रोम ब्राउज़र में बिटबकेट इंटरफ़ेस से वापस कैसे आना है) नहीं देखता।
अनजाने में किए गए परिवर्तनों को सुरक्षित करने के लिए अपनी पूरी निर्देशिका को वापस करें
-सेलेक्ट डायरेक्टरी को चेक करें
सटीक माउस बटन: कछुआ गिट मेनू
-रेपो-ब्राउज़र (मेनू विकल्प 'रिवर्ट' केवल अनचाहे परिवर्तनों को हटा देता है)
हेड बटन दबाएं
ऊपरवाला लाइन (अंतिम प्रतिबद्ध) का चयन करें
-राइट माउस बटन: इस कमिट द्वारा परिवर्तन को वापस लाएं
-इसके बाद यह फाइल सिस्टम, प्रेस कमिट पर बदलाव को अनडिप्ट करता है
-यह एक संदेश is रिवर्ट (आपका पिछला संदेश) के साथ जीआईटी को अद्यतन करता है। यह श्रद्धालु ऐसा करते हैं '
-अच्छी तरह से 'कमिट एंड पुश' करें।